본문 바로가기

C++

[C++]Virtual에대한 중요한예제

class Base{
public: int x;
 Base():x(0){}
 virtual void print(){ cout << "Base Class print()\m";}
};
class Derived : public Base{
public: int y;
 Derived() : y(20) {x = 100;}
 void print() { cout << "Derived Class print()\n";}
};

     Base *b1 = new Base;
     Derived *d1 = new Derived;
     Base *b2 = new Derived;

     b1-> print();
     d1->print();
     b2->print();


이렇게 입력되면 답은 무엇일까?

첫번째는 Base Class print() 가 뜨고
두번째는 Derived Class print()가 뜹니다.
세번째는 Derived Class print()가 뜹니다. 그이유는 print()가 virtual이기 때문에
오버라이딩이 되어있으면 오버라이딩 되어있는 것을 사용하기 때문입니다.

여기에서 virtual 키워드를 삭제하고 다시 실행하면 답은 무엇일까?

첫번째는 Base Class print() 가 뜨고
두번째는 Derived Class print()가 뜹니다.
세번째는 Base Class print()가 뜨게 되는데
virtual이 없고 업캐스팅을 하게되면 부모클래스의 print()가 사용되기 때문입니다.



'C++' 카테고리의 다른 글

[C++]STL  (0) 2010.10.11
[C++] 템플릿  (0) 2010.10.07
[C++]추상 클래스를 인터페이스로  (0) 2010.10.04
[C++] 순수 가상 함수와 추상클래스 그리고 업캐스팅  (0) 2010.10.04
다형성 (Polymorphism)  (0) 2010.09.30