我在调用c ++中的其他构造函数时遇到问题。在Java中是这样的:
class Book {
static private int i;
private String s;
public Book() {
i++;
}
public Book(String s) {
this();
this.s = s;
}
}
答案 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()
{ ... }
};