2013-07-05 72 views
-4

我有一个问题调用其他C++中的默认构造函数。在Java中是这样的:C++构造函数调用默认构造函数

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

    public Book() { 
    i++; 
    } 

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

在C++ 11中,您可以使用委托构造函数 –

+0

该代码无效C++(我认为您已经知道了)。问题是什么? –

+0

这是一个java代码,我需要知道如何将这个代码在c + + – user2553917

回答

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() 
    { ... } 
}; 
+0

奇怪的C#它工作正常,但在C + +不......我会创建一个函数,将持有我需要的代码。 – user2553917

2

在C++中,我们有委托构造。有两件事情去了解它:

  • 它们仅因为C++ 11,而不是所有的编译器已经实现了他们。

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

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