C++入门经典-例8.9-抽象类,纯虚函数,创建纯虚函数
C++入门经典-例8.9-抽象类,纯虚函数,创建纯虚函数
1:包含有纯虚函数的类称为抽象类,一个抽象类至少具有一个纯虚函数。抽象类只能作为基类派生出的新的子类,而不能在程序中被实例化(即不能说明抽象类的对象),但是可以使用指向抽象类的指针。在程序开发过程中并不是所有代码都是由软件构造师自己写的,有时候需要调用库函数,有时候分给别人写。一名软件构造师可以通过纯虚函数建立接口,然后让程序员填写代码实现接口,而自己主要负责建立抽象类。
2:纯虚函数
纯虚函数是指被标明为不具体实现的虚成员函数,它不具备函数的功能。许多情况下,在基类中不能给虚函数一个有意义的定义,这时可以在基类中将它声明为纯虚函数,而实现留给派生类去做。纯虚函数不能被直接调用,而仅起到提供一个与派生类已知的接口的作用。
声明纯虚函数的形式为:
virtual 类型 函数名(参数列表)=0;
纯虚函数不可以被继承。当基类是抽象类时,在派生类中必须给出基类中纯虚函数的定义,或在该类中再将其声明为纯虚函数。只有在派生类中给出了基类中所有纯虚函数的实现时,该派生类才不再称为抽象类。
3:创建纯虚函数的示例代码如下:
// 8.9.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <iostream> using namespace std; class CFigure { public: virtual double getArea() =0; }; const double PI=3.14; class CCircle : public CFigure { private: double m_dRadius; public: CCircle(double dR) { m_dRadius=dR; } double getArea() { return m_dRadius*m_dRadius*PI; } }; class CRectangle : public CFigure { protected: double m_dHeight,m_dWidth; public: CRectangle(double dHeight,double dWidth) { m_dHeight=dHeight; m_dWidth=dWidth; } double getArea() { return m_dHeight*m_dWidth; } }; void main() { CFigure *fg1; fg1= new CRectangle(4.0,5.0); cout << fg1->getArea() << endl; delete fg1; CFigure *fg2; fg2= new CCircle(4.0); cout << fg2->getArea() << endl; delete fg2; }
运行结果:
程序中定义了矩形类CRectangle和圆形类CCircle,两个类都派生于图形Cfigure。图形类是一个在现实生活中不存在的对象,抽象类面积计算方法不确定,所以,将图形类CFigure的面积计算方法设置为纯虚函数,这样圆形有圆形面积的计算方法,矩形有矩形面积的计算方法,每个继承自Cfigure类的对象都有自己的面积,通过getArea成员函数就可以获取面积值。