반응형
#include <iostream>
using namespace std;
class Animal
{
int age;
public:
void Cry() { cout << "Animal Cry" << endl; }
//virtual void Cry() { cout << "Animal Cry" << endl; }
};
class Dog : public Animal
{
int color;
public:
void Cry() { cout << "Dog Cry" << endl; }
};
int main()
{
Dog d;
Animal* p = &d;
// 포인터 p는 Dog로 부터 유래 했지만 기본적으로 현재의 타입을 따른다.
// 그러므로 아래의 코드는 Animal::Cry()가 수행된다.
p->Cry();
// 그런데 Dog의 Cry()를 호출하고자 한다면? Animal::Cry()를 가상함수로 만들면된다.
}
위의 예제에서 포인터 p는 Dog로 부터 유래했다. 그러나 Animal 포인터 p로 대입되어 Dog의 부모함수인 Animal의 Cry함수가 호출된다.
그런데 이 포인터 p의 원본인 파생클래스 Dog의 Cry함수가 호출되도록 하고자 한다면? 부모 클래스 Animal의 Cry함수를 가상함수로 만들면 된다.
반응형
'프로그래밍 이야기 > C++ 기초' 카테고리의 다른 글
[C++] 예제로 배우는 객체 지향 #1 (0) | 2020.11.24 |
---|---|
[C++] Protected Contructor (0) | 2020.11.24 |
Range based for (0) | 2020.09.09 |
코드 컨밴션에 대한 고민 (0) | 2018.12.19 |
Bubble Sort (0) | 2018.11.23 |