C++ 从接口和强制转换的多重继承

C++ Multiple inheritence from interfaces and casting

本文关键字:转换 多重继承 接口 C++      更新时间:2023-10-16

如果我有一个继承自一个接口(下图)的类,wxPane

class iClassA
{
public:
    virtual ~iClassA() {}
    virtual bool FuncA() = 0;
};

承认:

class ConcereteClass : public iClassA, wxPane
{
public:
    bool FuncA();
};

是否可以接受包含我的ConcereteClassiClassA *std::vector,或者vmaps会对铸造感到困惑?

是的,这是完全可以接受的。这也是一种非常常见的模式。

std::vector<iClass*> v;
v.push_back(new ConcreteClass);
v[0]->FuncA(); // calls ConcreteClass::FuncA();
if (ConcreteClass* cc = dynamic_cast<ConcreteClass*>(v[0])) {
    // succeeds
}
delete v[0];   // correctly calls ConcreteClass::~ConcreteClass()

请注意,您继承自 wxPane private ly。