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