C++ 如何使用两个或多个构造函数初始化同时创建一个对象

C++ 如何使用两个或多个构造函数初始化同时创建一个对象,c++,c++17,C++,C++17,我们如何一次创建一个具有两个或多个构造函数初始化的对象, 不更改所有重载构造函数和其他现有代码?(或者,如果根本没有,至少要尽可能地改变) 你不能在C++中这样做。 只需创建一个具有4个参数的构造函数,或者在类中添加Setter并设置值。C++无法在语言级别上表示两阶段构造的概念。根据法令,如果一个对象的构造函数完成了,那么它就是一个活动对象。这意味着它的所有子对象都已经构造好了(或者已经初始化,或者没有初始化)。您可以在其存储中创建一个新对象,但这会覆盖旧对象,导致其生命周期结束 您可以让

我们如何一次创建一个具有两个或多个构造函数初始化的对象, 不更改所有重载构造函数和其他现有代码?(或者,如果根本没有,至少要尽可能地改变)

<谢谢>

你不能在C++中这样做。
只需创建一个具有4个参数的构造函数,或者在类中添加Setter并设置值。

C++无法在语言级别上表示两阶段构造的概念。根据法令,如果一个对象的构造函数完成了,那么它就是一个活动对象。这意味着它的所有子对象都已经构造好了(或者已经初始化,或者没有初始化)。您可以在其存储中创建一个新对象,但这会覆盖旧对象,导致其生命周期结束

您可以让一个构造函数将主构造推迟到另一个构造函数。但在这样做时,其他构造函数将正确地构造对象。即使如此,这也是一个实现细节;它不是出现在对象接口中的东西


您可以在构造函数中初始化对象的
const
部分,并具有初始化其他子对象的函数。但是,就语言而言,这与处理对象成员的任何其他函数调用都没有什么区别。

为什么你有两个构造函数,既没有初始化对象的完整性?不幸的是,C++没有这样的工作。如果需要以这种方式构造对象,则必须创建另一个构造函数。变量O的多个声明。为什么不创建一个包含所有4个参数的构造函数呢?考虑到前面的问题,我认为您想要的一些东西表明存在XY问题。你试图做一些事情,你认为两次构造对象是做这件事的方法。几乎可以肯定不是这样,而且对于您试图实现的目标,有一个更好的解决方案。
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); // ?