[c++] Virtual Functions (가상 함수) 본문

객체지향프로그래밍 (C++)

[c++] Virtual Functions (가상 함수)

미니모아 2020. 7. 10. 14:28
반응형
  1. virtual function
    부모 메소드 앞에 virtual 키워드를 사용하면 부모객체 포인터에서 업캐스트했을 때에도  오버라이드한 자식 메소드를 실행할 수 있다. (자식 객체 포인터에 부모 객체를 다운캐스트 했을 경우에도 )

    class Shape{
    public:
     void Move(double x, double y);
     virtual void Draw(); // pure virtual function
    
     Shape();
     Shape(double x, double y);
    protected:
    double _x, _y;
    };
    void Shape::Draw() const{
    cout << "[Shape] Position = ( " << _x << ", " << _y << ")\n";
    }
    (생략)
    
    Shape* shapes[5] = { NULL };
    shapes[0] = new Circle(100, 100, 50);
    shapes[1] = new Rectangle(300, 300, 100, 100);
    shapes[2] = new Rectangle(200, 100, 50, 150);
    shapes[3] = new Circle(100, 300, 150);
    shapes[4] = new Rectangle(200, 200, 200, 200);
    
    for (auto i = 0; i < 5; ++i)
        shapes[i]->Draw();
    
    for (auto i = 0; i < 5; ++i) {
        delete shapes[i];
        shapes[i] = NULL;


2. pure virtual functions (순수 가상 함수)
자기 자신의 구현이 없어도 됨

 
class Shape{
public:
    void Move(double x, double y);
    virtual void Draw() const = 0; // pure virtual function

    Shape();
    Shape(double x, double y);

protected:
    double _x, _y;
};

(생략)
반응형
Comments