下面,我们举一个完整的例子:
20 10 上面的代码中,我们用基类CPolygon指针指向派生类CRectangle和CTriangle对象,调用派生类的area成员函数,而在main函数中输出area函数的计算结果。我们也可以在CPolygon类中定义一个成员函数,用于打印计算结果,而不管是哪一个派生类的area函数的计算结果。CPolygon类修改如下: class CPolygon { … public: …; void printarea (void) { cout << this->area() <<endl; } }; 并把main函数作如下修改: int main () { … ppoly1->printarea(); ppoly2->printarea(); return 0; } 上面我们已经看到:基类Vehicle包含有自己的、具体的message虚函数的实现。在C++中,也可以在基类中仅定义虚函数的信号:函数的名字、返回类型和参数,而没有实现,但在派生类中必须有该虚函数实现。 仅定义了函数的信号,而没有函数实现的虚函数称之为纯虚函数。定义纯虚函数的方法是在虚函数参数表右边的括号后加一个"=0"的后缀,例如: class vehicle { … virtual void message(void) = 0; }; 上面这段代码中,我们便把vehicle的message成员函数定义为纯虚函数。含有纯虚函数的类,我们称之为抽象类,_______。所以,抽象类也称之为抽象的基类。 下面,我们再看一个抽象类的例子: class CPolygon { protected: int width, height; public: void set_values (int a, int b) { width=a; height=b; } virtual int area (void) =0; }; Cpolygon类的成员函数area被定义为纯虚函数,它返回int变量,没有参数。因为Cpolygon类包含了纯虚函数area,所以,它是一个抽象类,下面的定义: CPolygon poly; 是错误的。我们虽然不能定义抽象类对象,但可以定义抽象类指针,例如: CPolygon * ppoly1; CPolygon * ppoly2 是完全正确的,这是因为基类的指针可以指向派生类的对象。 |
C++基础--抽象类
最新推荐文章于 2024-07-10 22:49:54 发布