91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C++私有繼承方法是什么

發布時間:2022-01-24 09:24:46 來源:億速云 閱讀:137 作者:iii 欄目:開發技術

本篇內容介紹了“C++私有繼承方法是什么”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

1.訪問基類方法

我們知道,在私有繼承時,基類的公有對象以及保護對象會變成派生類的私有對象。我們可以在派生類方法當中使用它,但無法通過派生類對象直接調用,但無法訪問基類的私有方法和對象。

這個概念我們很好理解,但具體到實現上,我們如何在派生類的方法當中調用基類的公有或者保護方法呢?

比如,在之前的類聲明當中我們聲明了一個Average方法,用來計算學生考試成績的平均分。由于Student類是繼承了valarray類,而非包含一個valarray的實例,那么我們如何在Average方法的實現當中調用valarray的公有方法呢?

答案是通過解析運算符和類名調用

double Student::Average() const {
    if (ArrayDb::size() > 0) {
        return ArrayDb::sum() / ArrayDb::size();
    }
    return 0;
}

2.訪問基類對象

現在我們知道了使用解析運算符可以訪問基類的方法,但問題又來了,如果我們要訪問的不再是基類的方法而是基類對象本身,那么我們應該怎么辦呢?

比如同樣例子當中我們有一個Name方法,需要返回學生的姓名。由于Student類只是繼承了string類并沒有自己的string實例,因此我們需要返回基類對象本身。

同樣,我們怎么操作呢?

答案是使用強制轉換。

const string& Student::Name() const {
    return (const string&) *this;
}

因為Student類是從string類中派生而來,所以我們是可以將Student對象強制轉換成string對象的。

3.訪問基類的友元

方法和對象都好辦,但友元怎么辦呢?因為友元函數并不屬于類,所以無法通過類名或者解析運算符搞定。針對這種情況,我們只能取巧,通過顯式地對派生類進行類型轉換實現。

例如:

ostream & operator<<(ostream& os, const Student& stu) {
    os << "Scores for " << (const string&) stu << ":\n";
}

在這個方法當中,我們顯式地將stu實例轉變成了基類string的類型,這樣就可以調用基類string的友元了。

引用不會自動發生轉換,是因為在私有繼承當中,在不進行顯式類型轉換的情況下,不能將派生類的引用或指針賦給基類的引用或指針。

那么問題來了,如果我們使用的是公有繼承,那么是不是就可以了呢?

答案是依然不行。

原因也簡單,首先在不使用類型轉換的情況下,os << stu和自身的友元函數類型匹配, 將會發生遞歸。其次由于C++支持多繼承,所以編譯器將會無法確定轉換成哪個基類的類型。因此還是需要我們手動進行強制類型轉換。

“C++私有繼承方法是什么”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

c++
AI

吉首市| 泗水县| 莲花县| 礼泉县| 永春县| 左云县| 旬阳县| 泗水县| 安福县| 那曲县| 泰顺县| 开江县| 临夏市| 嘉义市| 寻乌县| 宁乡县| 嘉荫县| 罗城| 太仓市| 两当县| 比如县| 舒兰市| 宁安市| 克山县| 泸定县| 木兰县| 上饶县| 邵阳县| 石景山区| 开原市| 栾川县| 瓦房店市| 白银市| 徐闻县| 湖州市| 益阳市| 通辽市| 新丰县| 大埔区| 佳木斯市| 中方县|