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

3

我不确定如何表达这个概念或它的确切名称,但我知道在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++中是否有这个相对应的东西;


https://dev59.com/BWYr5IYBdhLWcg3wFGdS - didierc
3个回答

5

在C++11之前,您无法这样做,但是从C++11开始,您可以这样做

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

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

对于 C++11 之前的解决方法点个赞。如果你使用的是某些尚不支持委托构造函数的 Microsoft 编译器版本,这也很有用。 - dlf

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接