상세 컨텐츠

본문 제목

Virtual함수를 직접 불러오는 방법

C++/템플릿

by nowpassion 2008. 5. 5. 14:18

본문

/*33.cpp*/
#include <iostream>
using std::endl;
using std::cout;
class Point
{
    int x_ptr;
    int y_ptr;
  
public:
    Point(int _x = 0, int _y = 0){
        x_ptr = _x;
        y_ptr = _y;
    }
    
    void getPoint(){
        cout << "X좌표 :" << x_ptr << endl;
        cout << "Y좌표 :" << y_ptr << endl;
      }
    
    int getX() const {
        return x_ptr;
    }
  
    int getY() const {
        return y_ptr;
    }
  
    virtual void draw() const{
        cout << "점을 찍었습니다." << endl;
    }      
};
class Circle : public Point
{
public:
    Circle(int _x = 0, int _y = 0) : Point(_x, _y){
    }
  
    int getArea() const {
        return getX() * getY();
    }
  
    void draw() const{
        Point::draw(); // A::fct(); 직접명시(추천)
        cout << "원을 그렸습니다." << endl;
    }       
  
};
class Cylinder : public Circle
{
    int height;
public:
    Cylinder(int _x = 0, int _y = 0, int _height=0) : Circle( _x , _y){
        height = _height;
    }
  
    int getVolume() const {
        return getArea() * height;
    }
  
    void draw() const{
        cout << "원기둥을 그렸습니다." << endl;
    }      
};
int main(){
    Cylinder * cyl = new Cylinder(3, 5, 8);
    Circle * cir = new Circle(3, 4);
    Point * pnt = new Point(1,2);
  
    cir->draw();
    cyl->Point::draw(); /*a -> A:fct(); 멤버함수의 스코프를 직접 명시 
                                    (비추천 : 강제로 스코프를 지정할 경우 스코프가 변해버리면
                                    전부 다시 바꿔줘야 합니다.)   */
    system("pause");
    return 0;
}

'C++ > 템플릿' 카테고리의 다른 글

템플릿을 확장하기 위해 연산자 오버로드딩을하는 경우  (0) 2008.05.05
함수 템플릿 오버로딩  (0) 2008.05.05
템플릿(Template)  (0) 2008.05.05
동적 / 정적바인딩  (0) 2008.05.05
Overriding?  (0) 2008.05.05

관련글 더보기