在下面的代码中,我希望获得5的输出,但我得到任意垃圾。为什么x没有设置为5?当我声明派生类对象并将x的值设置为5?
时,是否不会调用构造函数#include <iostream>
using namespace std;
class Base{
public:
int x;
Base(){
}
Base(int arg)
{
x = arg;
}
};
class Derived: public Base{
public:
Derived():Base(5){
}
};
int main() {
Base obj2;
Derived obj1;
cout << obj2.x;
return 0;
}
答案 0 :(得分:1)
在您的示例中,您没有将任何值传递给obj2
构造函数,因此您的x
成员仍未初始化。
请记住obj1
和obj2
不共享任何成员,它们是独立的,断开连接的实例。
答案 1 :(得分:0)
您的Base
默认构造函数未初始化x
并且它没有类内初始化程序,因此Base obj2;
构造一个未初始化x
的实例并从未初始化的变量中读取是未定义的行为。