Typing diary
상속, 가상함수, 순수가상함수 본문
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 | #include <iostream> using namespace std; //클래스는 서로간에 부모의 자식관계를 형성할 수 있다. //자식 클래스는 부모클래스의 멤버들을 사용할 수 있다. //보모클래스에서 public 이나 protect로 되어있는 멤버들은 사용 가능하지만 //private으로 되어있는 멤버는 자식에서도 사용이 불가능 하다. class CParent { public: CParent() {} //부모 클래스의 소멸자를 가상함수로 하지 않을시 업캐스팅된 객체의 경우 //소멸될때 자식클래스의 소멸자를 실행하지 않기 때문에 반드시 부모클래스의 //소멸자는 가상함수로 만들어 주어야 한다. virtual ~CParent() { cout << "Parent 소멸자" << endl; } //가상함수 virtual void Func() { cout << "Parent" << endl; } //순수 가상함수 //순수 가상함수는 구현부분이 존재하지 않으며 자식 클래스에서 반드시 //재정의 해줘야 한다. //순수 가상함수를 가지는 클래스를 추상클래스라고 하고 추상클래스는 객체 생성이 //불가능 하다. virtual void PureFunc() = 0; }; class CChild : public CParent { public: CChild(){} ~CChild(){ cout << "Child 소멸자" << endl; } //가상함수 재정의 void Func() { cout << "Child" << endl; } //순수가상함수 재정의 void PureFunc() { cout << "순수가상함수 실행" << endl; } }; int main() { //CParent var; -> CParent는 추상클래스이기 때문에 객체 생성이 불가능 하다. CParent* var = new CChild; //업캐스팅 var->Func(); var->PureFunc(); delete var; return 0; } | cs |
'C, C++' 카테고리의 다른 글
함수 포인터 (0) | 2022.08.17 |
---|---|
파일입출력 fwrite,fread (0) | 2022.08.17 |
조정자(Manipulator) (0) | 2022.08.17 |
c++ 참조와 포인터의 차이 (0) | 2022.08.17 |
String의 작동원리(c++) (0) | 2022.08.17 |