189 8069 5689

七、C++继承与多态-多重继承的那些坑该怎么填

理解虚基类和虚继承

多重继承:代码复用,一个派生类有多个基类。如:class C: public A,public B{};

10年积累的成都网站建设、网站建设经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先网站设计后付款的网站建设流程,更有丰泽免费网站建设让你可以放心的选择与我们合作。

虚基类:virtual可以修饰继承方式,是虚继承,被虚继承的类,称作虚基类。class A:virtual public B{};

虚继承的类中会多一个vbptr指向vbtable,Vbtable中保存的是虚基类中数据在派生类中的内存偏移量,从虚基类中继承的成员变量会被放在派生类内存的最下端。

虚函数和虚基类在调用的时候是没有问题的,

但是在delete的时候会发生堆报错

原因是:基类指针类型的成员p指向派生类对象,永远指向的是派生类基类部分数据的起始地址,这里的基类A的起始位置就是vfptr。但是这里的派生类B是虚继承的A,虚继承的部分会放到派生类内存的后面,p指向的就是派生类后面的内存,这种情况Delete p就不会删除派生类中的内存,造成了上图中的问题。

class A{
public:
    virtual void func(){cout<<"call A:func"<func();
    delete p;
}

delete的内存地址与new的内存地址不同,所以会造成问题。

菱形继承问题

继承的样子像菱形,叫菱形继承。类D中会继承两个类A中的成员。尽量避开多重继承。

多重继承的好处:可以做更多代码的复用。

用虚继承解决上面的问题。

class A{
public:
    A(int data):ma(data){
        cout<<"A()"<

如果虚继承就会在B和C中构造出vbptr指针,在D中指向类A中的成员变量。

使用虚继承避免继承多次的问题:

class B:virtual public A{//使用虚继承避免菱形继承的问题
public:
    B(int data):A(data),mb(data){
        cout<<"B()"<

C++的四种类型转换

const_cast:去掉(指针或者引用)常量属性的一个类型转换

static_cast:提供编译器认为安全的类型转换 基类和派生类可以通过static_cast进行转换

reinterpret_cast:类似于c风格的强制类型转换(不安全)

dynamic_cast:主要用在继承结构中,可以支持RTTI类型识别的上下转换

解释一下dynamic_cast的用法:

class Base{
public:
    virtual void func()=0;
};

class Derive1:public Base{
public:
    void func() override {
        cout<<"Derive1::func()"< (p);
    if(dp2!= nullptr){
        dp2->funcDerive2();
    }else
        p->func();
}

int main(){
    Derive1 d1;
    Derive2 d2;
    show(&d1);
    show(&d2);

    return 0;
}

/*
输出结果:
Derive1::func()
Derive2::funcDerive2()*/


文章名称:七、C++继承与多态-多重继承的那些坑该怎么填
链接地址:http://cdxtjz.cn/article/dsoipeo.html

联系我们

您好HELLO!
感谢您来到成都网站建设公司,若您有合作意向,请您为我们留言或使用以下方式联系我们, 我们将尽快给你回复,并为您提供真诚的设计服务,谢谢。
  • 电话:028- 86922220 18980695689
  • 商务合作邮箱:631063699@qq.com
  • 合作QQ: 532337155
  • 成都网站设计地址:成都市青羊区锣锅巷31号五金站写字楼6楼

小谭建站工作室

成都小谭网站建设公司拥有多年以上互联网从业经验的团队,始终保持务实的风格,以"帮助客户成功"为已任,专注于提供对客户有价值的服务。 我们已为众企业及上市公司提供专业的网站建设服务。我们不只是一家网站建设的网络公司;我们对营销、技术、管理都有自己独特见解,小谭建站采取“创意+综合+营销”一体化的方式为您提供更专业的服务!

小谭观点

相对传统的成都网站建设公司而言,小谭是互联网中的网站品牌策划,我们精于企业品牌与互联网相结合的整体战略服务。
我们始终认为,网站必须注入企业基因,真正使网站成为企业vi的一部分,让整个网站品牌策划体系变的深入而持久。