如何在c ++中将参数传递给基类构造函数

时间:2017-07-20 17:57:06

标签: c++ inheritance

在下面的代码中,我希望获得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;
}

2 个答案:

答案 0 :(得分:1)

在您的示例中,您没有将任何值传递给obj2构造函数,因此您的x成员仍未初始化。

请记住obj1obj2不共享任何成员,它们是独立的,断开连接的实例。

答案 1 :(得分:0)

您的Base默认构造函数未初始化x并且它没有类内初始化程序,因此Base obj2;构造一个未初始化x的实例并从未初始化的变量中读取是未定义的行为。