我可以在 C++ 中从另一个构造函数调用构造函数(做构造函数链接)吗? [英] Can I call a constructor from another constructor (do constructor chaining) in C++?

查看:38
本文介绍了我可以在 C++ 中从另一个构造函数调用构造函数(做构造函数链接)吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

作为 C# 开发人员,我习惯于通过构造函数运行:

As a C# developer I'm used to running through constructors:

class Test {
    public Test() {
        DoSomething();
    }

    public Test(int count) : this() {
        DoSomethingWithCount(count);
    }

    public Test(int count, string name) : this(count) {
        DoSomethingWithName(name);
    }
}

有没有办法在 C++ 中做到这一点?

Is there a way to do this in C++?

我尝试调用类名并使用this"关键字,但都失败了.

I tried calling the Class name and using the 'this' keyword, but both fail.

推荐答案

C++11:是的!

C++11 及更高版本具有相同的功能(称为 delegating构造函数).

C++11 and onwards has this same feature (called delegating constructors).

语法与 C# 略有不同:

The syntax is slightly different from C#:

class Foo {
public: 
  Foo(char x, int y) {}
  Foo(int y) : Foo('a', y) {}
};

C++03:否

不幸的是,在 C++03 中没有办法做到这一点,但有两种方法可以模拟这一点:

Unfortunately, there's no way to do this in C++03, but there are two ways of simulating this:

  1. 您可以通过默认参数组合两个(或多个)构造函数:

  1. You can combine two (or more) constructors via default parameters:

class Foo {
public:
  Foo(char x, int y=0);  // combines two constructors (char) and (char, int)
  // ...
};

  • 使用 init 方法共享公共代码:

  • Use an init method to share common code:

    class Foo {
    public:
      Foo(char x);
      Foo(char x, int y);
      // ...
    private:
      void init(char x, int y);
    };
    
    Foo::Foo(char x)
    {
      init(x, int(x) + 7);
      // ...
    }
    
    Foo::Foo(char x, int y)
    {
      init(x, y);
      // ...
    }
    
    void Foo::init(char x, int y)
    {
      // ...
    }
    

  • 请参阅C++常见问题解答以供参考.

    这篇关于我可以在 C++ 中从另一个构造函数调用构造函数(做构造函数链接)吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

    查看全文
    相关文章
    登录 关闭
    扫码关注1秒登录
    发送“验证码”获取 | 15天全站免登陆