美文网首页C++的知识分享程序员C++
15. C++抽象基类和纯虚成员函数

15. C++抽象基类和纯虚成员函数

作者: 飞扬code | 来源:发表于2019-04-09 08:04 被阅读7次

公共接口是指一系列成员函数的集合,支持该接口的类必须以合适的方式重新定义这些成员函数,否则就无法创建对象。
在C++中,可以通过抽象基类来实现公共接口。为了介绍抽象基类,我们需要先来了解一下纯虚成员函数。

纯虚成员函数的声明语法如下:

    virtual 函数返回类型 函数名 (函数参数) = 0;

纯虚成员函数没有函数体,只有函数声明,在纯虚函数声明结尾加上“=0”表明此函数为纯虚成员函数。

包含纯虚成员函数的类即为抽象基类,之所以说它抽象,那是因为它无法实例化,也即无法用于创建对象。

#include<iostream>
using namespace std;

class base
{
public :
    virtual void display() = 0;
    //......
};

int main()
{
    base b; //compile error
    return 0;
}

抽象基类是无法用于创建对象的,而主函数中我们尝试创建base类的对象,这是不允许的,编译提示语法错误。

纯虚成员函数可以被派生类继承,如果派生类不重新定义抽象基类中的所有(有多个则要重新定义多个)纯虚成员函数,
则派生类同样会成为抽象基类,因而也不能用于创建对象。

#include<iostream>
using namespace std;

class base
{
public :
    base(){x = 0;}
    base(int a){x = a;}
    virtual void display() = 0;
    int getx(){return x;}
private:
    int x;
};

class derived1 : public base
{
public:
    derived1(int a){ y = a;}
private:
    int y;
};

class derived2 : public base
{
public:
    derived2(int a, int b):base(a){ z = b;}
    void display()
    {
        cout<<getx()<<" "<<z<<endl;
    }
private:
    int z;
}

int main()
{
    base b;    //compile error
    derived1 d1(5);   //compile error
    derived2 d2(5,6);
    d2.display();
    return 0;
}

主函数中创建base类的对象,因为base类包含一个纯虚成员函数,因此是抽象基类,不能创建对象。
创建derived1的对象,derived1类继承了基类base中的纯虚成员函数,并且没有重新定义该函数,因此derived1类虽然是base类的派生类,但它仍然是抽象基类,因此同样不能创建对象。
创建derived2类的对象,该类同样是base类的派生类,同样从base类中继承了纯虚成员函数display,但是该类中同时也重新定义了该函数,因此覆盖了基类的纯虚成员函数,该类不是抽象基类,因此可以创建对象。

注意:
1、一个纯虚成员函数就可以使类成为抽象基类,但是抽象基类中除了包含纯虚成员函数外,同样可以包含其它成员函数或成员变量。
2、只有类中的虚函数才能被声明为纯虚成员函数,普通成员函数和顶层函数均不能声明为纯虚成员函数。
3、抽象基类可以用于实现公共接口,在抽象基类中声明的纯虚成员函数,派生类如果想要能够创建对象,则必须全部重新定义这些纯虚成员函数。

相关文章

  • ★01.基础概念

    抽象类:含有虚函数的类。 抽象基类:含有纯虚函数的类。 虚基类:多重继承中虚继承的基类。 类静态数据成员的定义必须...

  • C++抽象类(纯虚函数)

    C++抽象类 一、纯虚函数定义. 纯虚函数是在基类中声明的虚函数,它在基类中没有定义,但要求任何派生类都要定义自己...

  • 15. C++抽象基类和纯虚成员函数

    公共接口是指一系列成员函数的集合,支持该接口的类必须以合适的方式重新定义这些成员函数,否则就无法创建对象。在C++...

  • C++ - 纯虚函数与抽象类

    纯虚函数:没有函数体的虚函数 抽象类:包含纯虚函数的类只能作为基类来派生新类使用不能创建抽象类的对象抽象类的指针和...

  • c++语法4

    接上一篇继续学习抽象类、函数模板 抽象类 c++中的抽象类是通过纯虚函数体现的,凡是含有纯虚函数的类叫做抽象类纯虚...

  • 纯虚函数和抽象类

    纯虚函数和抽象类 概念 纯虚函数:没有函数体的虚函数。 抽象类:包含纯虚函数的类就称为抽象类。 纯虚函数就是在函数...

  • C++面试题系列:纯虚函数,虚函数,抽象类,纯抽象类

    C++面试题系列:纯虚函数,虚函数,抽象类,纯抽象类 2020年10月15日 14:40

  • C++boolan part1_week3

    C++纯虚函数 一、定义 纯虚函数是在基类中声明的虚函数,它在基类中没有定义,但要求任何派生类都要定义自己的实现方...

  • 2020-02-17-C++抽象类

    抽象类包含有纯虚函数 的类 称为 抽象类,一个抽象类 至少有一个纯虚函数,抽象类只能作为基类派生出 新的子类,...

  • 构造语义学

    继承构造函数 类具有可派生性,派生类可以自动的获取基类的成员变量和接口(虚函数和纯虚函数,public派生)。不过...

网友评论

    本文标题:15. C++抽象基类和纯虚成员函数

    本文链接:https://www.haomeiwen.com/subject/ibdviqtx.html