亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

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

宁都县| 昭苏县| 钟祥市| 耒阳市| 泊头市| 德清县| 乌拉特前旗| 山东省| 五莲县| 新安县| 行唐县| 静宁县| 恩施市| 新晃| 武冈市| 永顺县| 辽阳市| 宜君县| 新野县| 化隆| 百色市| 南皮县| 高密市| 安泽县| 双流县| 黄龙县| 西乌| 迁安市| 长海县| 三门县| 莱西市| 万安县| 长兴县| 墨江| 历史| 忻州市| 芮城县| 留坝县| 浦县| 宜黄县| 古浪县|