1. 程式人生 > >C++11新特性(80)-繼承的建構函式與多重繼承

C++11新特性(80)-繼承的建構函式與多重繼承

複習

本文算是前面文章的繼續。

對於繼承的建構函式,C++11通過一個簡單的using語句,使得繼承一個類時可以省去一些麻煩。具體可以參照下面的文章。

C++11新特性(59)-繼承的建構函式

https://mp.weixin.qq.com/s/BGUa7-RSCtFRnBYjUVFFDA

 

多重繼承的情況

上述方法在多重繼承時仍然有效,除了一種情況:被繼承的父類的構造函資料用相同的簽名。這時C++11會產生編譯錯誤。例如下面的程式碼:

錯誤的原因就是從兩個基類繼承來的SubClass::SubClass(int v)衝突了。

 

解決辦法

這種情況也可以看做是一種二義性,所以解決的辦法也類似:說清楚就行了。這裡只對SubClass進行修改:

高亮的部分就是修改內容,直接定義了SubClass(int v)建構函式並顯式呼叫的Base1和Base2的建構函式。呼叫Base2時還乘了個2,只是想表明可以隨意呼叫基類的建構函式,並沒有什麼太特殊的含義。

 

作者一句話

本文的內容只是針對使用新特性時可能發生的錯誤的一種處理方式,本身其實也算不上什麼新特性。

    

示例程式碼下載地址

https://github.com/xueweiguo/OOThinking/blob/master/20180526%20SameConstructor.cpp

 

覺得本文有幫助?請分享給更多人。

閱讀更多更新文章,請掃描下面二維碼,關注微信公眾號【面向物件思考】