본문 바로가기

전체 글70

[C++]순수 가상함수와 추상 클래스, 인터페이스(interface) 순수 가상함수 class 상속에서 virtual 키워드를 통해 오버라이딩 함수(가상함수)를 구현 class 상속의 다형성을 구성했는데, 여기서 문제점이 하나 발생하게 됩니다. 부모 class에서 구현한 가상함수를 자식 class가 반드시 구현해야 한다는 강제성이 없다는 것입니다. 즉, 부모 class에서 가상함수를 구현했지만 자식 class에서 이 가상함수를 오버라이딩 하지 않아도 된다는 것입니다. 이렇게 되면 class 상속을 통해 다형성을 구성하지 못합니다. 이 때문에 등장한 것이 순수 가상함수입니다. class C_PARENT { public: virtual void func() abstract; //virtual void func() = 0; //virtual void func() = NULL; .. 2018. 1. 30.
[C++]Class 상속 Class 상속 class에서 상속은 상위 개념을 하위 개념이 상속받아서 사용하는 것입니다. 그리고 상속을 사용하기 위해서는 추상화와 구체화의 구분이 명확해야 합니다. 따라서 class 상속을 공통적인 부분을 구현하여 상속받아 사용한다는 것은 틀린 개념이고, 이렇게 사용할 경우 추후에 수정이나 추가를 해야 할 경우 구현해야 하는 부분이 많아지고 복잡해집니다. Class 상속 사용 방법 상위 class(부모 class)를 하위 class(자식 class)가 상속받기 위해서는 하위 클래스 이름 옆에 ' : '와 접근 제한자, 그리고 상속할 class 이름을 붙여주시면 됩니다. class C_PARENT { ... }; class C_CHILD : public C_PARENR { ... }; Class 상속의.. 2018. 1. 30.
[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.