C++多重继承了多个接口之后怎么从一个接口转型到另一个接口呢?

左笔一支 发布于 2014/04/12 21:58
阅读 646
收藏 3

代码如下:

#include <iostream>

using namespace std;

class IA
{
public:
    virtual ~IA() {};
    virtual void PrintA(void) = 0;
};

class IB
{
public:
    virtual ~IB() {};
    virtual void PrintB1(void) = 0;
    virtual void PrintB2(void) = 0;
};

class CC : public IA, public IB
{
public:
    ~CC() {};
    void PrintA(void)
    {
        cout << "A" << endl;
    }
    void PrintB1(void)
    {
        cout << "B1" << endl;
}
    void PrintB2(void)
    {
        cout << "B2" << endl;
    }
};

int main()
{
    IA* a = new CC();
    a->PrintA(); // Ok
    ((CC*)a)->PrintB2(); // Ok
    ((IB*)a)->PrintB2(); // 杯具,调用了PrintB1
    return 0;
}

在win32下codeblocks测试。

怎么从IA正确地转型都IB呢?或者说怎么样能从一个指着CC对象的IA指针的得到正确指向该对象的IB指针呢?

加载中
0
从来不登录
撸红薯
撸红薯
这玩意需要虚函数也就是虚函数表支持,不然你就傻逼了
左笔一支
就是就是,谢谢。我之前也查过几本书都只说了dynamic_cast只能转型子类,原来还有这个功能。
0
xiaobaihexiaomo
左笔一支
就是就是,谢谢。我之前也查过几本书都只说了dynamic_cast只能转型子类,原来还有这个功能。。
0
l
love_code

((IB*)(CC*)a)->PrintB2()

左笔一支
要通过具体类CC的话不是很好
返回顶部
顶部