#include<iostream> using namespace std; class Cshape { public: void SetColor(int color) { m_nColor = color; } virtual void Display(void) { cout << "Cshape" << endl; } private: int m_nColor; }; class Crectangle : public Cshape { public: virtual void Display(void) { cout << "Crectangle" << endl; } }; class Ctriangle : public Cshape { virtual void Display(void) { cout << "Ctriangle" << endl; } }; class Cellipse :public Cshape { public: virtual void Display(void) { cout << "Cellipse" << endl; } }; int main() { Cshape obShape; Cellipse obEllipse; Ctriangle obTriangle; Crectangle obRectangle; Cshape * pShape[4]= { &obShape,&obEllipse, &obTriangle,& obRectangle }; for( int I= 0; I< 4; I++) pShape[I]->Display( ); }
时间: 2024-03-09 08:49:28 浏览: 62
#include <iostream>
这段代码与之前的代码非常相似,主要区别在于基类的 Display() 函数被声明为虚函数。这个小小的改动会产生很大的影响,因为它使得在运行时动态绑定函数成为可能。也就是说,当我们使用基类指针来调用一个虚函数时,实际上会调用指向对象的实际类型的函数。
在这个程序中,基类的 Display() 函数被声明为虚函数,因此在派生类中重载了 Display() 函数后,基类指针调用 Display() 函数时会根据指向对象的实际类型来动态绑定函数。因此,在运行时,分别调用了每个派生类的 Display() 函数,所以输出结果是:
```
Cshape
Cellipse
Ctriangle
Crectangle
```
这正是我们想要的输出结果。
阅读全文