【问题标题】:C++ class constructors syntax [duplicate]C ++类构造函数语法[重复]
【发布时间】:2015-12-01 18:34:06
【问题描述】:

当同一个类有多个构造函数时,有什么方法可以在 C++ 中使用类似 C# 的构造函数语法,例如:

class complex
{
public:
    double re, im;

    complex(double r, double i)
    {
        re = r;
        im = i;
    }

    complex():this(0.0d,0.0d) 
    {

    }
};

这个特定的例子似乎没有用,但是有没有?

【问题讨论】:

  • 是的,你可以前向调用不同的构造函数,你用类名来引用它,而不是这个
  • 回答了同样的问题here

标签: c++


【解决方案1】:

在 C++11 中你可以这样做:

class complex {
public:
    double re, im;

    complex(double r, double i) 
      : re(r), im(i) {

    }

    complex()
      : complex(0.0d, 0.0d) {

    }
};

如果由于某种原因你不能使用 C++11 并且你需要一个这么简单的案例,你可以使用默认参数:

class complex {
public:
    double re, im;

    complex(double r = 0.0, double i = 0.0) 
      : re(r), im(i) {

    }
};

这当然有一个缺点:您可以(错误地)只提供一些参数,例如:complex a(1.0)

【讨论】:

    【解决方案2】:

    从 C++11 开始有 constructor delegation feature.

    你可以这样做:

    class A{
    public:    
       A(): A(0){ cout << "In A()" << endl;}
       A(int i): A(i, 0){cout << "In A(int i)" << endl;}
       A(int i, int j){
          num1=i;
          num2=j;
          average=(num1+num2)/2;
          cout << "In A(int i, int j)" << endl;}  
    private:
       int num1;
       int num2;
       int average;
    };
    
    int main(){
       class A a;
       return 0;
    }
    

    【讨论】:

      猜你喜欢
      • 2014-07-05
      • 2019-04-14
      • 2016-07-08
      • 2020-12-14
      • 1970-01-01
      • 2018-10-17
      • 2017-07-30
      • 2017-01-05
      • 1970-01-01
      相关资源
      最近更新 更多