【问题标题】:How to create one object with two or more constructor initialization at once如何一次创建一个具有两个或多个构造函数初始化的对象
【发布时间】:2019-10-25 02:05:22
【问题描述】:

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

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); // ?

谢谢

【问题讨论】:

  • 为什么有两个构造函数,都没有完全初始化对象?
  • 不幸的是,C++ 不能以这种方式工作。如果您需要以这种方式构造对象,则必须创建另一个构造函数。
  • 变量O的多重声明
  • 为什么不创建一个包含所有 4 个参数的构造函数?
  • 鉴于您之前的问题,我认为您想要的一些东西表明存在 XY 问题。您正在尝试做某事,并且您认为两次构造对象是做那件事的方法。几乎可以肯定不是,对于您要完成的工作,有更好的解决方案。

标签: c++ c++17


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2014-03-19
      • 1970-01-01
      • 2020-02-08
      • 1970-01-01
      • 2016-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-20
      相关资源
      最近更新 更多