k****5 发帖数: 546 | 1 MemDepResult() : Value(0, 0) {}
Value 里面怎么能有俩个东西? | z****e 发帖数: 2024 | 2 为什么不可以呢?
注意 class B's initialization list: "_obja(i,j)".
#include
using std::ostream;
class A{
public:
A(int a, int b):_a(a),_b(b){}
int _a;
int _b;
};
class B{
public:
B(int i, int j):_obja(i,j){}//pay attention here
private:
A _obja;
friend ostream& operator<<(ostream& os,const B& b){
os<
return os;
}
};
main(){
using namespace std;
B objb(1,2);
cout<
} | k****5 发帖数: 546 | | z****e 发帖数: 2024 | 4 这个问题后来我又仔细看了一下,没有100%把握理解对了,
这里的几个头牌大侠给解释解释吧。thrust 大侠,Xentar 大侠,等大侠们,菜鸟我呼
唤你们的醍醐灌顶。
谢过了先。 | X****r 发帖数: 3557 | 5 你只是引了一段没有解释的代码,没看出来你的理解是什么,我也说不上来你的理解
对不对。
类的构建函数里可以初始化它的基类或是成员,比如:
class D : B {
A a;
D() : B(1,2), a(3,4,5) {}
}
那么D::D()运行的时候,在进入{}里的代码前,先调用B::B(1,2)来初始化D里的B
子对象,再调用A::A(3,4,5)来初始化D里的a成员。这些基类或者成员相应的构造函
数有多少个参数自然这个初始化列表里就有多少个参数。对于不是类的成员,它们的
“构造函数”就是赋初值,只有一个参数。
【在 z****e 的大作中提到】 : 这个问题后来我又仔细看了一下,没有100%把握理解对了, : 这里的几个头牌大侠给解释解释吧。thrust 大侠,Xentar 大侠,等大侠们,菜鸟我呼 : 唤你们的醍醐灌顶。 : 谢过了先。
| z****e 发帖数: 2024 | 6 那个代码是我自己测试写的,
现在我改成这个:
class B{
public:
B(int i, int j, A a):_obja(a){}//pay attention here
private:
A _obja;
friend ostream& operator<<(ostream& os,const B& b){
os<
return os;
}
};
也行。
是不是说 initialization list 的参数可以是成员的构造函数形式,也可以是拷贝构
造函数?就是两种构造函数都能用在初始化列表里面?
【在 X****r 的大作中提到】 : 你只是引了一段没有解释的代码,没看出来你的理解是什么,我也说不上来你的理解 : 对不对。 : 类的构建函数里可以初始化它的基类或是成员,比如: : class D : B { : A a; : D() : B(1,2), a(3,4,5) {} : } : 那么D::D()运行的时候,在进入{}里的代码前,先调用B::B(1,2)来初始化D里的B : 子对象,再调用A::A(3,4,5)来初始化D里的a成员。这些基类或者成员相应的构造函 : 数有多少个参数自然这个初始化列表里就有多少个参数。对于不是类的成员,它们的
| X****r 发帖数: 3557 | 7 任何构造函数都可以,包括copy constructor。
如果你在代码中可以写
A a(一坨参数);
那么对于B的成员a就可以写B::B():a(一坨参数) {}
当然,这个也一样要受access control的限制。
【在 z****e 的大作中提到】 : 那个代码是我自己测试写的, : 现在我改成这个: : class B{ : public: : B(int i, int j, A a):_obja(a){}//pay attention here : private: : A _obja; : friend ostream& operator<<(ostream& os,const B& b){ : os<: return os;
| z****e 发帖数: 2024 | 8 我这里早谢了。
【在 X****r 的大作中提到】 : 任何构造函数都可以,包括copy constructor。 : 如果你在代码中可以写 : A a(一坨参数); : 那么对于B的成员a就可以写B::B():a(一坨参数) {} : 当然,这个也一样要受access control的限制。
|
|