no image
[C++] 연산자 다중 정의
c++에서는 class에 한해서 연산자 재정의 또는 다중 정의가 가능 고려해야 할 요소가 많아질 수 있음 class CMyData { public: void setData(int nParam) { MyData = nParam; } int getData() { return MyData; } private: int MyData; }; int main(int argc, char* argv[]) { CMyData a; CMyData b; a + b; // Error return 0; } class CMyData { public: void setData(int nParam) { m_nData = nParam; } int getData() { return m_nData; } /////////////////// //..
2024.04.15
no image
[C++] 생성자
기본 생성자 다중 정의 생성자 - 매개변수 존재(변환 생성자 - 매개변수가 1개) 복사 생성자(r-value 참조) 이동 생성자 복사 생성자 Deep copy : 대상체도 복사 Shallow copy : 복사하여 같은 대상체를 참조(기본 복사 생성자) class CTest { public: CTest() { m_nData = new int(5); } CTest(const CTest &rhs) { this->m_nData = rhs.m_nData; } ~CTest() { delete m_nData; } int m_nData = 0; }; 포인터 멤버 변수에 대해서는 shallow copy를 했을 때 같은 포인터를 가리키기 때문에 소멸자에서 에러 발생 복사 생성자를 정의해서 deep copy 해주어야 함 클..
2024.02.05
no image
[C++] 네임스페이스
변수 또는 함수 이름의 중복을 방지하고자 등장 #include namespace TEST { int g_nData = 100; void TestFunc(void) { std::cout
2024.02.05
no image
[C++] 다형성
int Add(int a, int b) { return a + b; } double Add(double a, double b) { return a + b; } template T Add(T a, T b) { return a + b; } C++은 다형성의 개념이 존재 이를 template을 사용해서 표현 가능 int Add(int a, int b = 10) { return a + b; } int Add(int nParam) { return nParam + 10; } int main(void) { Add(3); return 1; } 기본값과 함께 사용하면 모호성이 존재 모호성은 유지보수에 좋지 않음
2024.02.05
no image
[C] Makefile & CMake
Makefile Compile 방법을 기술하는 파일 다수의 파일을 한번에 컴파일 가능 Make 주어진 Makefile에 따라 compile을 수행하고 실행파일을 생성 최초 컴파일 이후에는, 변경이 있는 파일만 컴파일 함 Rule Block : Target : Build 대상 이름, 일반적으로 최종 결과 파일명 사용 Dependency : Build 대상이 의존하는 Target이나 파일 목록 Recipe : Build 대상을 생성하는 명령어 app.out: main.o foo.o bar.o gcc -o app.out main.o foo.o bar.o main.o: foo.h bar.h main.c gcc -c -o main.o main.c foo.o: foo.h foo.c gcc -c -o foo.o fo..
2024.01.23
no image
[C] 전처리기
전처리기 : Compile전에 코드를 변헝, CPU 연산 x #include : 컴파일러 설정의 시스템 디렉터리에서 검색 "" : 현재 프로젝트 폴더에서 검색 매크로와 __inline 함수 실제로는 함수가 아니라 한 행 혹은 여러 행으로 기술할 수 있는 구문 함수를 호출할 때 overhead(인자 복사 등)가 발생하기 때문에 매크로 사용(내용이 적을 때) 인자의 형을 정하지 않기 때문에 위험, 사용 자제를 추천 -> __inline 함수로 대체 #define ADD(a, b) (a + b) // 괄호를 하지 않으면 연산자 우선순위가 엇갈릴 수 있음 #define STRING(a) #a #define PASTER(a, b) a##b int main(void) { printf("%d\n", ADD(3, 4)..
2024.01.12
no image
[C] 컴파일 최적화
컴파일 최적화 컴파일러가 수행 코드에서 논리적으로 당연한 내용을 제거 특정 변수에 대해 의존성이 존재하는 연산들을 구별 최적화 방해요소 변수의 수가 늘어날수록 타 변수와의 조합을 통해 논리적 구조가 복잡해짐 -> 변수 개수를 줄이기(상수화) 포인터 사용 -> 메모리 주소는 런타임 때 결정나기 때문에 자제해야 함 Const 형 한정어 상수화 컴파일은 이 변수를 숫자로 인식함 성능향상 가능 인자로 포인터를 받아서 데이터를 읽기만 할때 사용하면 좋음 심볼릭 상수 : 특정 숫자와 변수의 이름을 조합하여 좀 더 의미가 명확해 보이는 상수로 표현, 전처리기로도 가능(#define) if (score
2024.01.10
no image
[C] 구조체와 공용체
자료형 : 일정 길이의 메모리에 저장된 정보 해석 방법 배열 : 동일 형식의 연속된 집합체 구조체 : 서로 같거나 다른 형식들의 연속된 집합체 -> strcut 공용체 : 같은 데이터에 대해 여러 형식으로의 해석 방법을 부여하는 문법 -> union 구조체 인자로 넘길 때는 call by reference를 사용해서 메모리 복사를 방지 자기참조로 single linked list를 구현 가능 구조체 멤버 맞춤 : 요소를 char와 int로 했을 때, 실제로는 char에 4바이트 크기의 메모리가 할당됨 -> 이를 방지하기 위해 #pragma pack(push, 1)을 사용해 1바이트 단위로 정렬하게 함(I/O는 느려짐) 비트 필드 : 구조체 선언 시 요소에 ':'를 사용해 비트 단위로 설정 가능 공용체 t..
2024.01.10
no image
[C] 파일 입출력
파일 유저모드에서 커널모드로 진입할 수 있는 인터페이스 -> 보조기억장치를 사용하는 하나의 방법 변수와 동적 메모리 사용이 RAM을 사용하기 위함이었다면, File은 Disk를 사용하기 위함 최초 크기는 0 -> Write가 일어나면 공간이 줄어들고 크기가 늘어나며 I/O 지점이 변경됨 고유의 I/O 버퍼를 소유 논리 구조가 선형 구조 -> Streaming 가능 -> Buffer, Queue를 떠올리자 EOF(End of File) : -1은 텍스트 파일의 끝을 의미(바이너리 파일은 -1을 하나의 데이터로 인식) fopen(), fclose(), fprintf() 등 파일 시스템 파일을 관리하는 시스템 커널에 위치 FAT32, NTFS 등
2024.01.10