我在 C++ 中从其他调用默认构造函数时遇到问题。在 Java 中是这样的:
class Book {
static private int i;
private String s;
public Book() {
i++;
}
public Book(String s) {
this();
this.s = s;
}
}
我在 C++ 中从其他调用默认构造函数时遇到问题。在 Java 中是这样的:
class Book {
static private int i;
private String s;
public Book() {
i++;
}
public Book(String s) {
this();
this.s = s;
}
}
如果您有一个能够委派构造函数的编译器,只需调用初始化列表中的默认构造函数:
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()
{ ... }
};
在 C++ 中,我们有委托构造函数。关于它有两点需要了解:
它们仅从 C++11 开始可用,并非所有编译器都已实现它们。
正确的语法是使用构造函数的初始化列表:
Book(std::string s) : Book() { ... }