class Shape{
public:
virtual double calArea() = 0;
};
class Rect:public Shape{
public:
Rect(double w, double h){
this->m_w = w;
this->m_h = h;
}
double calArea(){
cout << "Rect area: " << m_w*m_h << endl;;
return m_w*m_h;
}
private:
double m_w, m_h;
};
class Circle :public Shape{
public:
Circle(double r){
this->m_r = r;
}
double calArea(){
cout << "Circle area: " << 3.1415926*m_r*m_r << endl;;
return 3.1415926*m_r*m_r;
}
private:
double m_r;
};
void play(Shape* s){
s->calArea();
}
Main:
//Shape s;//抽象类不能被实例化
Shape* s = NULL;
Rect r(4,7);
s = &r;
play(s);//Rect area: 28
//play(&r);
Circle c(5);
s = &c;
play(s);//Circle area: 78.5398
//play(&c);