【发布时间】:2015-08-26 10:36:20
【问题描述】:
我有以下代码
#include <iostream>
using namespace std;
class B{
int i;
public:
B(){
cout << "Constructing B\n";
}
void print(){
cout << "Printing from B with size : "<<sizeof(*this)<<endl;
}
};
class D:public B{
int i;
public:
D(){
cout << "Constructing D\n";
}
void print(){
cout << "Printing from D with size : "<<sizeof(*this)<<endl;
}
};
int main(){
B b;
b.print();
D d;
d.print();
D* dp;
dp->print();
}
这给了我以下输出:
Constructing B
Printing from B with size : 4
Constructing B
Constructing D
Printing from D with size : 8
Printing from D with size : 8
那么,当您创建指向派生类的指针时,它不会首先创建基类的实例,这是真的吗?我不认为这是真的,因为 D 类的大小就是证明。但它甚至没有调用基类构造函数。谁能解释一下?
【问题讨论】:
-
这里,
D* dp; dp->print();是未定义的行为。它可以打印任何内容,也可以不打印任何内容。 -
当您“创建指向派生类的指针”时,它不会创建任何任何对象(不包括指针本身)。
-
那么 dp 指向的内存大小是 8。这就是我想知道的。
-
相关问题:为什么不格式化你的硬盘?
-
@davidhigh 哈哈,虽然我知道指针的力量.. 它们非常棒。
标签: c++ pointers inheritance derived-class base-class