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;
}
View Code

运行结果:

    程序中定义了矩形类CRectangle和圆形类CCircle,两个类都派生于图形Cfigure。图形类是一个在现实生活中不存在的对象,抽象类面积计算方法不确定,所以,将图形类CFigure的面积计算方法设置为纯虚函数,这样圆形有圆形面积的计算方法,矩形有矩形面积的计算方法,每个继承自Cfigure类的对象都有自己的面积,通过getArea成员函数就可以获取面积值。

posted @ 2017-09-22 12:44  一串字符串  阅读(336)  评论(0编辑  收藏  举报