일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- error
- 스트리밍
- firebase
- bigquery
- Hyperledger
- quick-start
- kotlin
- convert
- Exception
- hardwareacceleration
- 컴파일
- coroutines
- porterduff
- vuepress
- C
- Glide
- Realm
- LAYER_TYPE_SOFTWARE
- dataginding
- log
- test
- ethereum
- fabric-sdk-java
- Android
- 안드로이드
- Gradle
- fabic
- null safety
- web3js
- 다윈
- Today
- Total
목록프로그래밍/C / C++ (41)
날마다 새롭게 또 날마다 새롭게
C++ 스타일의 초기화 방식은 다음과 같이 두 가지로 볼 수 있다.int num=20; 혹은 int num(20);위의 두 가지 초기화 방식은 결과적으로 동일하다. 객체 초기화 방식도 두 가지로 볼 수 있는데, 먼저 익숙한 대입 연사를 사용한 초기화 방식은 다음과 같다.SoSimple sim1(15,20); SoSimple sim2=sim1;sim2 객체를 새로 생성해서 객체 sim1과 sim2 간의 멤버 대 멤버 복사가 일어난다고 볼 수 있다. 이 명령을 또 다른 초기화 방식을 적용하여 입력하면 다음과 같다.SoSimple sim2(sim1);sim1은 객체 이므로 객체를 인자로 받을 수 있는 생성자 호출이 이루어지고 있는 것을 볼 수 있다. 그렇다면 객체를 인자로 받을 수 있는 생성자는 어떻게 정의되..
이니셜라이저의 역할은 클래스 생성 시, 클래스 내의 멤버변수를 초기화하는 것이다.이니셜라이저는 다음과 같은 형태로 정의한다.class Rectangle{Point upLeft;Point lowRight;public:Rectangle(int x1, int y1,int x2, int y2);}Rectangle::Rectangle(int x1, int y1,int x2, int y2):upLeft(x1,y1),lowRight(x2,y2){}이 중에서 :upLeft(x1,y1),lowRight(x2,y2) 가 이니셜라이저이다.생성자 함수 내에서도 멤버변수를 초기화 할 수 있지만, 클래스 내부의 Point 객체는 아래와 같이 함수 내부에서 초기화할 수 없다.{ upLeft(x1,y1);}하지만 이니셜라이저를 이용..
#ifndef ~ #endif 는 헤더파일의 중복포함을 막기 위해서 사용하는 매크로이다.사용 방법은 다음과 같다.#ifndef __POINT_H_#define __POINT_H_typedef struct __point{ int x; int y;} point;#endif__POINT_H_ 가 정의 되어있지 않으면 __POINT_H_를 정의하고 __point 구조체를 선언한다. 위 헤더파일이 한번이라도 포함이 되면 __POINT_H_는 정의되어 있기 때문에 __point 구조체가 중복 정의 되지않는다.
구조체(클래스)는 서로 다른 타입을 갖는 변수들의 집합이다.구조체의 선언은 다음과 같다.Struct 이름{멤버 목록} 변수명;Struct 이름 변수명;사용자 정의형 타입을 만드는 명령어 typedef 를 사용하여 보다 더 편하게 선언할 수 있다.typedef struct 이름 { 멤버목록} 변수명;이름 변수명;연관있는 서로 다른 타입의 변수들을 하나로 묶어주면 프로그램을 구현하고 관리하는데 용이하다.그렇다면 다음은 연관있는 변수들을 그룹화 하고 이를 처리하는 함수들을 구조체에 포함시켜 보자.C에서는 Struct에 데이터들만 모아놓았지만 C++에서는 다음과 같이 Struct 내 함수 삽입이 가능하다.Struct 이름 {변수들 :char name[100];int age;int height;Struct 내 변..
참조자는 이미 선언된 변수를 대신할 수 있는 또 다른 이름을 말한다.(일종의 별명,, 호 같은 것으로 생각하면 될 것 같다.)예를 들어,,,int num1 = 100;위와 같이 100이라는 값을 갖고 있는 num1 이라는 변수가 있을 때, 우리는 참조자를 이용하여 num1에 또 다른 이름을 부여할 수 있다.num1에 또 다른 이름을 부여하는 명령의 형태는 다음과 같다.int &num2 = num1;위의 명령으로 num1에 num2라는 또 다른 이름을 주었고, 우리는 num1과 num2 두 개의 변수를 사용하여 100이라는 값에 접근할 수 있다. 참조자를 사용하여 다른 함수의 지역변수에 접근이 용이하다. 하지만 데이터를 가져다 쓰는 것만이 아니라 데이터를 변경할 수도 있기 때문에 참조자를 통한 데이터 변경..
메모리는 데이터와 명령어를 저장하는 공간을 말한다.프로그램 실행 시 사용하는 메모리 공간은 Hard Disk, Ram, Cache, Register 4개 영역이 있다. 이 4개의 영역을 운영체제가 단순화하여 하나의 메모리 공간으로 만드는데 이를 가상 메모리 공간이라고 한다.Hard Disk + Ram + Cache + Register = 가상메모리가상 메모리는 역할에 따라서 코드 영역, 데이터 영역, 힙 영역, 스택 영역 이렇게 4개의 공간으로 나뉩니다.코드 영역 : 코드를 저장하는 공간으로 프로그램 실행 시, CPU가 이 곳에서 명령어를 하나씩 가져가서 처리한다.데이터 영역 : 프로그램이 종료될 때까지 지워지지 않는 데이터를 저장하는 공간으로 전역변수, const 상수, static 변수 등이 있다.힙..
전처리기는 소스코드를 컴파일하기 전에 보기 좋게 소스코드를 재 작성하는 역할을 한다.전처리기에서 처리하는 전처리기문은 보통 명령어 앞에 #이 붙어있다.예를 들어, 다음과 같은 형태를 갖는다.#include, #define, #pragma, #ifdef
매크로 함수는 다음과 같은 형태로 정의된다.#define SQUARE(x) ((x)*(x))함수 내에서 호출 시, 다음과 같은 형태로 사용한다. SQUARE(5);이 코드는 프로그램을 실행하기 전에 전처리기에서 사용자가 define 으로 정의한 형태 그대로 치환한다. 위의 코드를 치환하면 다음과 같다.((5)*(5));매크로 함수 사용 시, 전처리기가 정의되어 있는 형태 그대로 치환하기 때문에 전체식과 개별 인수에 모두 괄호를 사용하는 것이 좋다.
프로그램의 실행을 위해서 사용하는 메모리 공간은 데이터 영역, 힙영역, 스택영역 세 가지로 나뉜다. 1)데이터 영역: 전역변수, static변수 2)힙 영역: 프로그래머 할당 ( ->메모리 동적할당 ) 3)스택 영역: 지역변수, 매개변수 메모리 할당 정적 할당 : 스택과 데이터 영역에 메모리 할당 (컴파일 타임에 메모리 크기 결정) 동적 할당 : 힙 영역에 메모리 할당 (런 타임에 메모리 크기 결정) ■ malloc 함수 malloc 함수는 동적으로 메모리를 할당하는 함수이다. void* malloc(size_t size) 성공 시 할당된 메모리의 첫 번째 주소 리턴, 실패 시 NULL 포인터 리턴.. ■ free 함수free 함수는 동적으로 할당한 메모리를 해제하는 함수이다. void* free(voi..
데이터 입력과 출력에는 스트림과 버퍼를 사용한다. 스트림은 시스템과 입출력 장치를 연결하는 통로이고 버퍼는 스트림을 통해 이동하는 데이터들의 임시 저장 공간이다. 데이터를 전송할 때 목적지로 바로 보내는 것이 아니라, 버퍼에 임시로 저장해 두고 데이터가 어느 정도 채워 지면 한꺼번에 데이터를 전송하게 된다. 이렇게 스트림과 버퍼로 데이터 전송보다 상대적으로 중요한 작업들을 수행하여 작업 처리의 효율을 높일 수 있다.■ fread 함수 size_t fread ( void * ptr, size_t size, size_t count, FILE * stream );스트림에서 (size) * (count) 크기의 데이터블록을 읽어와 ptr에 입력한다. 이 함수의 리턴값은 읽어들인 데이터의 개수이다. ※ 스트림 :..