考虑下面的代码:多重继承和指针实现
namespace Example1 {
class A {
public:
A() {}
virtual ~A() {}
private:
float data_A;
};
class B {
public:
B() {}
virtual ~B() {}
protected:
float data_B;
};
class Derived : public A, public B {
public:
Derived() {}
virtual ~Derived() {}
protected:
float data_Derived;
};
}
int main (void)
{
using namespace Example1;
B* pb = new Derived;
delete pb;
}
pb
现在应该指向Derived
对象的B
一部分。 但派生对象也衍生自A
,意味着它具有A
子对象..并且A
子对象应该是“第一”,因为Derived
类首先从A
继承。
编译器如何批准?它为了使其正确工作而添加了什么?
还有,如何在删除对象时正确释放内存?
您已经创建了一个Derived对象,您还创建了一个指向B的指针,并将Derived的地址指定给它。这些是独立的事实。在运行时,对象的类型不会因为将其地址指定给基本类型的指针而丢失。你可以从B *中dynamic_cast到Derived *,它会成功。 “怎么?”,你问。那么,这是“如何完成”。如果编译器无法保证这一点,它将不符合C++标准。 – 2013-04-24 07:37:08