zoukankan      html  css  js  c++  java
  • 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成员函数就可以获取面积值。

  • 相关阅读:
    操作系统介绍
    python 面向对象 公有属性 用在哪里
    python 类 __module__ __class__
    操作系统发展史
    python 面向对象 字典 有序字典
    python 面向对象 私有属性
    python 面向对象 类 __doc__
    saltstack 部署
    【SQL】MySQL之使用mysqlbinlog进行增量备份及恢复详解
    [SOA] Mule ESB 3.x 入门(二)—— 配置(spring, properties, log4j)
  • 原文地址:https://www.cnblogs.com/lovemi93/p/7574307.html
Copyright © 2011-2022 走看看