#include <iostream>
#include <string>
using namespace std;
class Shape
{
public:
Shape(void) {}
~Shape(void) {}
virtual void draw(void) const { cout<<"Shape draw"<<endl; }
};
class Rectangle : public Shape
{
public:
Rectangle(void) {}
~Rectangle(void) {}
void draw(void) const { cout<<"Rectangle draw"<<endl; }
};
class Ellipse : public Shape
{
public:
Ellipse(void) {}
~Ellipse(void) {}
};
int _tmain(int argc, _TCHAR* argv[])
{
Shape *pr = new Rectangle;
pr->draw();
pr->Shape::draw();
delete pr;
pr = NULL;
Shape *pe = new Ellipse;
pe->draw();
delete pe;
pe = NULL;
}
OUT:
Rectangle draw
Shape draw
Shape draw
在上面的例子中,通过指定一个完整的class名称来调用基类的虚方法(pr->Shape::draw();),
这里就是静态调用。通过该方法我们可以通过一个指向子类的指针调用基类的方法。我们也可以
不用改写(override)该虚方法(draw),在子类(Ellipse)中没有对虚方法(draw)进行重写,
它可以调用基类的默认方法,这是虚函数的默认行为。