簡體   English   中英

C ++ - 構造函數調用構造函數

[英]C++ - Constructors calling constructors

我不知道如何用它來表達它或它實際上被稱為什么,但我知道在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 ++中是否有相同的東西;

在C ++ 11之前,你無法做到這一點,但從C ++ 11開始,你可以做到

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

在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) {}

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

在C ++ 11之前,一個構造函數無法調用另一個構造函數。 在這種情況下,使用復制/粘貼或初始化所有變量的單個方法,並從多個構造函數調用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM