C++多重继承和基类地址

本文探讨了C++中的多重继承特性,通过一个实例展示了当使用基类指针转换为继承类指针时可能遇到的问题。由于不同基类在内存中的位置不同,直接转换可能导致 segmentation fault。解决方法是利用继承关系,通过已有的基类指针获取其他基类或派生类的地址。
摘要由CSDN通过智能技术生成

C++支持多重继承,比如

class Derived : public Base1, public Base2 {

    …

};

 

我们熟知的基类指针强转成继承类指针的用法是这样子的:

base *p1 = … // 实际指向derived object

derived *p2 = (derived *)p1;

或者运行时转换,需要打开编译选项rtti

derived *p2 = dynamic_cast<derived>(p1);

if(p2 != NULL) …

// p2可以调用继承类的方法

 

但是如果有多重继承时这个方法就很危险了! 下面举个例子:    

// define an interface
class A {
public:
    A() {
        printf("A created at %lld\n", (long long)this);
    }
    virtual void theInterface() = 0;
    int someData1;
};


// base class
class B {
public:
    B() {
        printf("B created at %lld\n", (long long)this);
    }
    int someData2;
};

class C : public B, public A {
public:
    C() {
        printf("C created at %lld\n", (long long)this);
    }

    // implement interface in A
    virtual void t
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值