版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/clksjx/article/details/88852638
《面向对象程序设计C++——网易云课堂,翁恺》
class XYPos{...};//坐标点
class Shape{
public:
Shape();
virtual ~Shape();
void move(const XYPos&);
virtual void render();
virtual void resize();
protected:
XYPos center;
};
class Ellipse : public Shape{
public:
Ellipse(float maj, float minr);
virtual void render();//此处virtual可不加,只要有一代父类有virtual,后面的子孙类的该函数都是virtual。
protected:
float major_axis, minor_axis;
};
class Circle : public Ellipse{
public:
Circle(float radius):Ellipse(radius, radius){}
virtual void render();
};
void render(Shape* p){
p->render();//对Shape及子类均可使用
}
void func(){
Ellipse ell(10, 20);
ell.render();
Circle circ(40);
circ.render();
render(&ell);//向上造型
render(&circ);//向上造型
}
virtual的作用:通过指针或者引用调用函数时,要到调用时才能具体知道参数的类型。即动态绑定。
代码中的p
称为多态对象。