虚基类,虚函数和纯虚函数的区别

虚基类:解决c++多重继承,有一种情况菱形继承的时候,如果不进行处理,会导致基类在派生类中会产生多个实例的情况。
在这里插入图片描述

class Book
{
public:
    std::string name;
};

class EnglishBook:public virtual Book
{
public:
    std::string bookno;
};

class MathBook :public virtual Book
{
public:
    std::string bookno;
};

class ColleageBook :public EnglishBook,
                    public MathBook
{
public:
    std::string bookownername;
};

在ColleageBook中只有一份Book类的实例,避免了多个Book基类实列的存在

虚函数:在基类中使用virtual进行声明的函数,方面在派生类中进行重写,通过虚函数可以实现c++的多态。

class Book
{
public:
    std::string name;
public:
    virtual std::string Getname()
    {
        return name;
    }
};

class EnglishBook:public  Book
{
public:
    std::string bookno;
public:
    std::string Getname()
    {
        return bookno;
    }
};

由于本文只讨论三者的区别,因此对虚函数的详细内容不过多的展开介绍。

纯虚函数:在基类中使用virtual进行声明的函数,并且没有具体的函数内容,纯虚函数参数后接“=0”;
纯虚函数必须由派生类进行重写
含有纯虚函数的类,叫做抽象类
抽象类是不能创建实例化对象的,只能由派生类进行继承。

class Book
{
public:
    std::string name;
public:
    virtual std::string Getname() = 0;
    
};

class EnglishBook:public virtual Book
{
public:
    std::string bookno;
public:
    std::string Getname()
    {
        return bookno;
    }
};
  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值