一个例子概括;
#include <iostream>
using namespace std;
class CShape
{
public:
virtual void display(){ cout << "Shape \n"; }
//void display(){ cout << "Shape \n"; }
};
//------------------------------------
class CRect : public CShape
{
public:
virtual void display(){ cout << "Rectangle \n"; }
//void display(){ cout << "Triangle \n"; }
};
class CEllipse : public CShape
{
public:
virtual void display(){ cout << "Ellipse \n"; }
//void dispaly(){ cout << "Ellipse \n"; }
};
class CCircle : public CEllipse
{
public:
virtual void display(){ cout << "Circle \n"; }
//void display(){ cout << "Circle \n"; }
};
class CTriangle : public CCircle
{
virtual void display(){ cout << "Triangle \n"; }
//void display(){ cout << "Triangle \n"; }
};
class CSquare : public CRect
{
public:
virtual void display(){ cout << "Square \n"; }
//void display(){ cout << "Square \n"; }
};
//------------------------------------------------
void main()
{
CShape aShape;
CCircle aCircle;
CTriangle aTriangle;
CRect aRect;
CSquare aSquare;
CEllipse aEllipse;
CShape * pShape[6] = { &aShape,
&aEllipse,
&aCircle,
&aTriangle,
&aRect,
&aSquare,
//&aEllipse2
};
for (int i = 0; i < 6; i++)
pShape[i]->display();
}
结果如下:
将virtual去掉后结果如下:
函数从派到基,后者为大,有virtual就听自己的,这个不多少说!