-3

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

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

  public Book() {
    i++;
  }

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

2 回答 2

5

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

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()
    { ... }
};
于 2013-07-05T13:55:39.920 回答
5

在 C++ 中,我们有委托构造函数。关于它有两点需要了解:

  • 它们仅从 C++11 开始可用,并非所有编译器都已实现它们。

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

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

于 2013-07-05T13:53:25.217 回答