如何在不更改所有重载构造函数和其他现有代码的情况下,同时创建一个具有两个或多个构造函数初始化的对象?(如果没有,至少要改变一下)
class valuation {
public:
valuation(const int s) : pos(s) {};
valuation(int a,int b,int c) : j(a),k(b),l(c) {};
private:
const int pos;
int j,k,l;
main(){
int a=1,b=2,c=3, v=7;
// how to set pos=7 j=1 k=2 l=3 once, below just illustration
valuation O(v) // ?
valuation O(a,b,c); // ?谢谢
发布于 2019-10-25 02:44:11
C++不能在语言级别上表示两阶段构造的概念.如果一个对象的构造函数完成,那么它就是一个活动对象。这意味着它的所有子对象都已经被构造(或者初始化了或者没有初始化)。您可以在它的存储中创建一个新对象,但这会覆盖旧的对象,从而导致它结束其生命周期。
可以让构造函数将主构造推迟到另一个构造函数。但是在这样做时,其他构造函数将正确地构造对象。即使如此,这也是一个实现细节;它并不会出现在对象的接口中。
您可以在构造函数中初始化对象的const部分,并具有一个函数来初始化其他子对象。但就语言而言,这与操纵对象成员的任何其他函数调用没有任何不同。
发布于 2019-10-25 02:26:01
您不能在C++中这样做。只需创建一个包含4个参数的构造函数,或者在类中添加Setter并设置值。
https://stackoverflow.com/questions/58551264
复制相似问题