【发布时间】:2010-09-14 20:38:15
【问题描述】:
我想知道c++如何确保这些类在内存中的概念布局以支持继承。
例如:
class Base1
{
public:
void function1(){cout<<"Base1"};
};
class Base2
{
public:
void function2(){cout<<"Base2"};
};
class MDerived: Base1,Base2
{
public:
void function1(){cout<<"MDerived"};
};
void function(Base1 *b1)
{
b1->function1();
}
因此,当我将派生类型的对象传递给函数时,该函数应该偏移到 base1 类函数中并调用它。 C++如何保证这样的布局。
【问题讨论】:
-
您的
MDerived::function1方法正在打印“Base1”,我认为这不是您想要的。我已经编辑了你的帖子。 -
可以请一些编译器应该生成的内存布局。以及派生对象如何转换为基类。因为派生内存中有两个基类,编译器如何知道要选择哪个偏移量。
-
该标准没有定义内存布局,这由实现者决定。严格来说,这个问题中的每个答案都是在讨论一些编译器用来实现虚函数的平台特定方式。
标签: c++