C ++ - 构造函数调用构造函数

时间:2014-06-30 15:41:42

标签: c++ constructor

我不确定如何说出这个或它实际调用的内容,但我知道在Objective-C中你可以拥有多个可以相继调用的构造函数,原谅任何代码错误,我暂时没有做到这一点,但这个想法就在那里。

- (id)initWithTitle:(NSString *)_title;
- (id)initWithTitle:(NSString *)_title page:(NSString *)_page;

-----------------------------------

- (id)initWithTitle:(NSString *)_title {
    return [self initWithTitle:_title page:nil];
}

- (id)initWithTitle:(NSString *)_title page:(NSString *)_page {
    if(self = [super init]) {
        self.title = _title;
        self.page = _page;
    }
    return self;
}

我只是想知道在c ++中是否有相同的内容;

3 个答案:

答案 0 :(得分:5)

在C ++ 11之前,你无法做到这一点,但从C ++ 11开始,你可以

class Foo  {
     int d;         
public:
    Foo  (int i) : d(i) {}
    Foo  () : Foo(42) {} //new to c++11
};

答案 1 :(得分:4)

在C ++ 11中,您可以委托给其他构造函数:

Thing(string title) : title(title) {}
Thing(string title, string page) : Thing(title) {this->page = page;}

历史上,您可以在函数中执行共享工作:

Thing(string title) {init(title);}
Thing(string title, string page) {init(title); this->page = page;}

虽然在这样的简单情况下,你可能会更好地使用默认参数

Thing(string title, string page = "") : title(title), page(page) {}

答案 2 :(得分:2)

在C ++ 11中,您有Delegating构造函数:  https://www.ibm.com/developerworks/community/blogs/5894415f-be62-4bc0-81c5-3956e82276f3/entry/introduction_to_the_c_11_feature_delegating_constructors?lang=en

Pre C ++ 11,一个构造函数无法调用另一个构造函数。在这种情况下,使用复制/粘贴或初始化所有变量的单个方法,并从多个构造函数调用。