【发布时间】:2019-11-17 00:05:06
【问题描述】:
我有一个类,它的成员属性由在别处定义的对象组成。在下面的代码中,A 包含一个公共属性var,它是一个B:
class B {
public:
int x, y;
std::vector<int> z;
B(int a, int b, std::vector<int> c) {
x = a; y = b; z = c;
}
};
class A {
public:
B var;
A(int i, int j) {
std::vector<int> someVector;
B(i, j, someVector);
}
};
int main() {
A foo(5, 3);
return 0;
}
这(显然)无法编译,因为 var 是在 A 的实例化时实例化的,为时已晚,无法构造它。
我能做类似事情的最好方法是修改一些代码:
class B {
public:
int x, y;
std::vector<int> z;
B() {}
void setAttributes(int a, int b, std::vector<int> c) {
x = a; y = b; z = c;
}
};
class A {
public:
B var;
A(int i, int j) {
std::vector<int> someVector;
B.setAttributes(i, j, someVector);
}
};
这确实可以编译,因为属性是在实例化之后设置的。
但是有没有办法保持更接近第一个代码sn-p?
【问题讨论】:
-
您可能正在寻找member initializer list
标签: c++ class oop instantiation