C ++来自接口和转换的多重继承

时间:2015-04-28 12:33:58

标签: c++ inheritance multiple-inheritance

如果我有一个继承自一个接口(下面)和wxPane

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

沈志南:

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

std::vector类型为iClassA *的{​​{1}}是否可以包含ConcereteClass,或者vmaps是否会在投票时感到困惑?

1 个答案:

答案 0 :(得分:6)

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

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继承的。