티스토리 뷰
객체 포인터
-> 1. 파생 클래스의 객체를 가리키는 기본 클래스의 객체 포인터를 사용할 수 있음.
-> 2. 기본 클래스의 객체를 가리키는 파생 클래스의 객체 포인터는 사용할 수 없음.
class Animal {
public:
void breathe();
};
class Fish : public Animal {
public:
void breathe();
};
Animal* a = new Fish; // 1. 가능
Fish* f = new Animal; // 2. 불가능
가상 함수(virtual function)
-> 상속 관계에 있는 클래스를 객체 포인터 형태로 사용할 때 의미가 있음.
-> 실행 시점에서 수행할 영역이 정해지므로 융통성 있는 개발이 가능.
-> 동적 결합 방식으로 실행됨.
-> 객체 포인터의 3번 사항을 해결하는데 이용.
순수 가상함수 : 가상 함수의 선언만 존재. 실제 구현부가 없는 가상함수.
-> 기본 클래스 작성 시 파생 클래스에서 반드시 구현해야 하는 기능에 대한 선언을 미리 해둠
-> virtual void breathe() = 0;
추상 클래스 : 순수 가상함수를 포함하고 있는 클래스
-> 아직 정의되지 않은 멤버함수를 가지고 있어 객체를 생성할 수 없음
-> 파생 클래스를 정의하고, 순수 가상함수를 구현하여 객체 생성
========> 추상 클래스를 상속받아 작성되는 파생 클래스에서 순수 가상함수 구현 시 파생 클래스에서 객체 생성이 가능. 추상 클래스의 포인터는 파생 클래스의 객체를 가리킴
class cMain
{
public:
virtual void TestFun() = 0;
};
class cSub : public cMain
{
public:
void TestFun();
};
void cSub::TestFun()
{
printf("cSub!\n");
}
void main()
{
cMain *test = new cSub;
test->TestFun();
}
가상 소멸자 (virtual destructor)
-> 기본 클래스의 객체 포인터가 파생 클래스의 객체를 가리키고, 그 포인터를 통해 객체를 제거했을 때, 파생 클래스의 소멸자까지 호출되도록 하려면 기본 클래스의 소멸자를 가상소멸자(virtual destructor)로 지정.
class Animal {
public:
Animal();
virtual ~Animal();
};
class Fish : public Animal {
public:
Fish();
virtual ~Fish(); // ~Fish();
};
=====> delete 명령이 실행되면, 파생 클래스의 소멸자 -> 기본 클래스 소멸자 순으로 실행됨.
'Programming > C / C++' 카테고리의 다른 글
포인터 동적 할당 (0) | 2014.09.17 |
---|---|
정적(static) 멤버변수/멤버함수 & 고정(const) 멤버함수 (0) | 2014.09.04 |
[C++]함수 템플릿(Function Template) (0) | 2014.08.25 |
[C++]매크로 함수 / inline 함수 (0) | 2014.08.25 |
[C++]저장소의 종류 지정자 (0) | 2014.08.25 |