C ++构造函数调用默认构造函数

时间:2013-07-05 13:49:50

标签: c++ visual-c++

我在调用c ++中的其他构造函数时遇到问题。在Java中是这样的:

class Book {
  static private int i;
  private String s;

  public Book() {
    i++;
  }

  public Book(String s) {
    this();
    this.s = s;
  }
}

2 个答案:

答案 0 :(得分:3)

在C ++中,我们有委托构造函数。有两件事需要了解:

  • 它们仅在C ++ 11之后可用,并非所有编译器都已实现它们。

  • 正确的语法是使用构造函数的初始化列表:

    Book(std::string s) : Book() { ... }

答案 1 :(得分:2)

如果你有一个能够委托构造函数的编译器,只需调用初始化列表中的默认构造函数:

class Book
{
public:
    Book()
    { ... }

    Book(const std::string& s)
    : Book()
    { ... }
};

否则,您可以为常用初始化创建一个函数,并从所有构造函数调用它:

class Book
{
public:
    Book()
    { construct(); }

    Book(const std::string& s)
    {
        construct();
        // Other stuff
    }

private:
    void construct()
    { ... }
};