본문 바로가기

C++17

[C++]Class Operator와 대입연산자 Operator(연산자 오버로딩) class에 연산기능의 인터페이스를 구현하여 사용하는 것입니다. 사용자의 편의성을 위해 구현하는 기능이지만 class라는 모듈에 operator를 구현하면 사용자는 사실 이 operator 연산이 무슨 기능을 하는지 알기가 어렵습니다. 따라서 class의 모듈이 수학적인 기능만 가지고 있는 경우 operator를 구현하여 인터페이스를 제공하는 것이 좋습니다. operator의 형태는 다음과 같이 operator뒤에 연산기호를 붙여서 함수 이름으로 사용합니다. operator+ operator- operator* operator/ operator++ operator-- operator= operator+= ...... 반환 형식과 인수는 연산의 기능에 따라 사용자가 구현하.. 2018. 1. 25.
[C++]Class 소멸자(Destructor) 소멸자 소멸자는 class의 생성자와 반대로 객체가 소멸될 때(메모리 해제) 자동으로 호출되는 함수입니다. 형태는 반환형과 함수 인자가 없습니다. 인자가 없으므로 함수 오버로드가 불가능하며 class내에는 단 하나의 소멸자만 존재합니다. 따로 구현하지 않을 경우 default 소멸자가 자동으로 호출되며 기능은 없습니다. default 소멸자의 형태는 다음과 같습니다. class C_DATA { private: int m_nData; public: C_DATA(); ~C_DATA(); }; C_DATA::~C_DATA() { } 함수의 형태는 class 명 앞에 ~ 기호가 붙어 "~()"의 형태를 가집니다. default 소멸자의 경우 아무 기능이 없기 때문에 함수의 정의는 있지만 안에 내용은 없습니다. .. 2018. 1. 25.
[C++]복사 생성자와 delete 키워드 복사 생성자 C++ 클래스에는 프로그래머가 직접 구현하지 않아도 생성되는 생성자들이 있는데 그중 하나가 바로 복사 생성자입니다. 이름과 동일하게 복사 생성자는 class 변수에 다른 변수의 값을 복사하는 데 사용되는 생성자입니다. 생성자이기 때문에 변수의 생성과 동시에 초기화되어야 합니다. default 복사 생성자의 모습은 다음과 같습니다. (const & cData); 생성자이기 때문에 반환형은 없으며 인자로 const 레퍼런스로 받습니다. class C_DATA { private: int *m_pData; int m_nSize; public: C_DATA(); C_DATA(const C_DATA & cInput); void init(int nSize); }; int main() { C_DATA cD.. 2018. 1. 24.
[C++]Reference 레퍼런스 Reference 레퍼런스 C++ 에는 레퍼런스라는 형식이 존재합니다. 사용법은 다음과 같습니다. int nData1 = 0; int& nData2 = nData1; & 키워드를 사용하며 레퍼런스 변수는 생성과 동시에 반드시 초기화를 해 주어야 합니다. 반드시 자료형에 맞는 변수로 초기화를 해주어야 하며 상수로는 초기화가 불가능합니다. 단 const 키워드를 사용하면 상수로 초기화 가능합니다. const int& nData2 = nData1; 레퍼런스 변수는 이름이 붙여진 변수의 메모리에 다른 이름을 부여하는 형태로 메모리를 잡지 않는다는 이점이 있습니다. 그리고 C++에서 레퍼런스는 한 번 붙으면 없어지지 않기 때문에 사용 범위는 거의 함수 인자용으로 사용됩니다. 함수의 인자로 레퍼런스를 사용하면 인자.. 2018. 1. 24.
[C++]Class 생성자(Constructor) 생성자(Constructor) C++ class에는 생성자가 있습니다. 생성자는 변수를 생성하는 것과 동시에 호출되는 함수입니다. 즉, 변수가 메모리를 잡는 것과 동시에 호출되는 함수입니다. 생성자의 형태는 반환형이 없고 class의 이름과 동일한 함수입니다. class C_DATA { private: int *m_pData; int m_nSize; public: ... }; int main() { C_DATA cData; ... return 0; } 위의 class에는 원래 "C_DATA();" 형태의 생성자가 존재해야 하지만 생성자가 없는 것을 확인할 수 있습니다. C_DATA class에는 생성자가 없지만 class 변수 cData는 생성자를 호출하게 됩니다. 생성자가 없는데 호출한다는 것이 이상하.. 2018. 1. 24.