Arp*_*ana 2 c++ inheritance pointers base-class derived-class
我有以下代码
#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();
}
Run Code Online (Sandbox Code Playgroud)
这给了我以下输出:
Constructing B
Printing from B with size : 4
Constructing B
Constructing D
Printing from D with size : 8
Printing from D with size : 8
Run Code Online (Sandbox Code Playgroud)
因此,当您创建指向派生类的指针时,它是不是首先创建基类的实例?我不认为它是真的,因为D类的大小是证明.但它甚至没有调用基类构造函数.有谁能解释一下?
指针不会创建任何东西.指针只是指针 - 包含地址的标量对象.您有责任指出指向内存中的正确位置.
在您的示例中,指针dp未初始化.你永远不会把它指向任何地方,所以它无处可寻.您的调用尝试会dp->print()产生未定义的行为.故事结局.