c++ - 实例化后可以构造吗?避免空构造函数
问题描述
我有一个类,它的成员属性由在别处定义的对象组成。在下面的代码中,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);
}
};
这确实可以编译,因为属性是在实例化之后设置的。
但是有没有办法更接近第一个代码片段?
解决方案
A(int i, int j) : var(i, j, {}) {}
此外,在您的代码B(i, j, someVector);
中不会初始化成员变量var
,并且B.setAttributes(i, j, someVector);
根本不会编译。
推荐阅读
- spring-integration - 如何将原始消息存储到 JMS 队列而不是 org.springframework.messaging.MessageDeliveryException 表单中
- html - Where is LinkedIn pulling its page title and summary from?
- flatbuffers - How to build a vector of strings in python flatbuffer?
- python - How to fix Kernal error in jupyter notebook?
- angular - 为什么我的 html 中的 FormArrayName 始终未定义,即使使用安全导航运算符也是如此?
- discord.js - I don't know how to solve this error [client is not defined]
- python - 如何避免 + 符号被 GET 参数(Django)中的空格替换?
- node.js - Nodejs server not responding to Axios post from an HTTPS website
- javascript - cannot navigate on the history of iframe content
- javascript - 如何添加新标记并计算新路线