2013-02-24 59 views
0

我的预期输出是“bc bvfunc b(1)dc dvfunc”,但我得到了一个像“b(1)dc dvfunc”这样的输出。有人能帮我吗?感谢您宝贵的时间!为什么我得到了一个输出'b(1)dc dvfunc'?

#include<iostream> 

using namespace std; 

class b { 
public: 
    b() { 
    cout<<" bc "; 
    b::vfunc(); 
    } 
    virtual void vfunc(){ cout<<" bvfunc "; } 
    b(int i){ cout<<" b(1) "; } 
}; 

class d : public b { 
public: 
    d(): b(1) { 
    cout<<" dc "; 
    d::vfunc(); 
    } 
    void vfunc(){ cout<<" dvfunc"; } 
}; 

main() 
{ 
    d d; 
} 

回答

1

以获得所需的输出需要

d(){b(1);  //move b(1) from initializer list and put it in a constructor. 
    cout<<" dc "; 

仅供参考initializer list用于initialize构造函数调用之前类的成员默认value.Constructor可以覆盖这些值。

+0

谢谢你.....! – sree 2013-02-24 09:59:31

+2

什么?!这会创建两个不同的*'b',一个是'd'的一部分,另一个是临时存在于构造函数中的临时变量。几乎没有用(除了重现输出)。 – 2013-02-24 10:12:50

1

在事情完成顺序:

d()被调用。这将调用b(1),然后调用构造函数的其余部分。

所以调用顺序是

b(1) 
d() -> which is cout fc, and then cout dvfunc 

B()不会被调用,这样就不会达到bvfunc。 b()和b(int i)都是独立的构造函数,只有一个会被调用,而不是两个。

相关问题