class first{
int fa,fb;
public:
first();
first(int x,int y);
void display();
};
first::first():fa(0),fb(0){
}
first::first(int x,int y):fa(x),fb(y){
}
void first::display(){
cout<<fa<<" "<<fb;
}
class second{
first f;
int sa,sb;
public:
second();
second(int x,int y,int a,int b);
void display();
};
second::second():sa(0),sb(0){
}
second::second(int x,int y,int a,int b):f(x,y),sa(a),sb(b){
}
void second::display(){
cout<<"The Numbers are ";
f.display();
cout<<" "<<sa<<" "<<sb<<endl;
}
如果已经提出这个问题,我道歉。
这是一个简单的代码,用于演示c ++中嵌套类的工作原理。
但是,在类second
中,对象f
即使之前已经定义过,我也可以使用second
类的构造函数在其上调用构造函数。
如何在已定义的类实例上调用构造函数?
答案 0 :(得分:0)
对象first f;
是second
的成员。这意味着每个second
都包含first
。因此,在创建second
的过程中,必须创建first
。您的mem-initializer f(x,y)
详细说明了在创建f
对象时如何创建second
。
答案 1 :(得分:0)
当在函数中定义变量时,您可以混合使用不同的概念:
void foo()
{
Foobar f; // f is defined and default initialized here
Foobar d { 123 }; // d is defined and initialized with 123
}
并声明为class
或struct
:
struct boo {
Foobar f; // f is declared as member of type boo and how it will be
// initialized will be known in boo's constructor
// not here
boo() {} // f is default constructed
boo( int i ) : f { i } {} // f is initialized with i
};
为了让你在c ++ 11中更糟糕,你可以将参数传递给字段构造函数:
struct boo {
Foobar d { 123 }; // d would be initialized with 123 if otherwise is not set in boo's constructor
boo( int i ) : d { i } {} // 123 is ignored and d is initialized with i
boo() {} // d { 123 } is used
};
所以即使你将参数传递给字段,如何在boo的构造函数中定义字段的初始化。