2017-07-20 50 views
0

在下面的代码中,我期望得到5的输出,但是我得到了任意的垃圾。为什么x没有被设置为5?当我声明派生类对象并将x的值设置为5时,不会调用构造函数吗?如何将参数传递给C++中的基类构造函数

#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

这篇文章为什么会被降低投票率?我需要知道,所以我可以写更好的问题! –

+0

如果你将鼠标悬停在downvote附近的问题上,你可以看到它的原因是“不显示任何研究工作”。 –

+0

@SaubhagyaSrivastava谢谢。在我问之前,我确实已经努力研究这个问题。我下次可以做什么来证明我已经投入了这一努力? –

回答

1

在你的榜样,你不传递任何值给obj2构造,所以你x成员保持未初始化。

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

+0

啊,谢谢。这真的清除了事情。我很感激。任何想法为什么这个职位downvoted?我需要知道,所以我可以写更好的问题 –

+0

我从来没有想出这些downvoters的想法。我希望他们能评论他们为什么低估。 –

0

Base默认构造函数不初始化x,它有没有在一流的初始化,所以Base obj2;构建一个实例未初始化的x和未初始化的变量读的未定义行为。

相关问题