#include<iostream>
#include<string>
#include<tr1/memory>
using namespace std;
class Shape{
public:
enum ShapeColor{ Red, Green, Blue};
virtual void draw(ShapeColor color = Red) const= 0;
private:
};
class Rectangle: public Shape{
public:
virtual void draw(ShapeColor color = Green) const { if(color == Green) cout << "green " << endl;}
private:
};
class Circle : public Shape{
public:
virtual void draw(ShapeColor color = Blue) const { if(color == Blue) cout << " Blue " << endl;}
private:
};
int main()
{
//선언된 것을 따르는 것이, 정적 타입임으로 Shape
Shape *ps;
Shape *pc = new Circle;
Shape *pr = new Rectangle;
pc->draw();
pr->draw(); //Green이 아니라 Red가 넘어감
return 0;
}
출력값은?
아무것도 출력안됨
순수가상함수 또는 가상함수는 동적으로 바인딩되어 있지만 기본 매개변수는 정적으로 바인딩되어 있기 때문이다.
pr의 정적타입은 Shape이기 때문에, 지금 호출되는 가상 함수에 쓰이는 기본 매개변수 값을 Shape에서 가져온다. pc도 마찬가지
'c++' 카테고리의 다른 글
c++ 특성정보 (0) | 2012.09.28 |
---|---|
template C++ (0) | 2012.09.27 |
c++ quiz3 (0) | 2012.09.27 |
c++ strategy 패턴 (0) | 2012.09.27 |
Quiz2 (0) | 2012.09.26 |