본문 바로가기
프로그래밍 이야기/C++ 기초

[C++]Casting, Virtual function

by Mulder5 2020. 11. 24.
반응형
#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