亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C++私有繼承(一)

 更新時間:2022年01月23日 17:19:20   作者:?Coder梁  
這篇文章主要介紹了C++私有繼承,在私有繼承當(dāng)中,基類的公有成員和保護成員都會成為派生類的私有成員。這意味著基類的方法都會被private關(guān)鍵字描述,我們可以在派生類中使用它,但類對象無法直接調(diào)用,下面來看看詳細內(nèi)容吧

文章轉(zhuǎn)自微信公眾號:Coder梁(ID:Coder_LT)

1.私有繼承介紹

我們可以將一個類作為另外一個類的成員,這樣可以描述has-a的關(guān)系,即包含關(guān)系。

例如我們要創(chuàng)建一個Student類,它當(dāng)中要包含一個string類型的name,和valarray類型的scores。這里的valarray是C++中的一個模板類,它可以理解成一個泛型的數(shù)組,有些類似于vector和array,但提供的功能更多。比如擁有min, size, max, sum等方法。

除了使用成員變量來描述has-a關(guān)系之外,我們還可以使用私有繼承。

在私有繼承當(dāng)中,基類的公有成員和保護成員都會成為派生類的私有成員。這意味著基類的方法都會被private關(guān)鍵字描述,我們可以在派生類中使用它,但類對象無法直接調(diào)用。

2.語法

首先我們來看看私有繼承的語法,其實和共有繼承類似,只不過將public關(guān)鍵字替換為private,另外由于繼承關(guān)系默認為private,所以也可以不填。

using namespace std;
class Student : private string, private valarray<double> {
? ... ?
};

這里的private都可以省略。

其次是構(gòu)造函數(shù)中成員列表初始化的處理,如果是常規(guī)的成員定義方式,即:

class Student {
?private:
? ? ?string name;
? ? ?valarray<double> scores;
};

我們的構(gòu)造函數(shù)簽名可以這么寫:

Student(const string& n, const double *pd, int n): name(n), scores(pd, n) {}

但我們這個例子當(dāng)中用的是私有繼承,存儲的值都在基類當(dāng)中,所以我們只能通過類名來進行初始化:

Student(const string& n, const double *pd, int n): string(n), valarray<double>(pd, n) {}

為了書寫方便,我們可以定義一個類型轉(zhuǎn)換,將valarray<double> 替換為ArrayDb,于是上述的代碼可以寫成這樣:

Student(const string& n, const double *pd, int n): string(n), ArrayDb(pd, n) {}

Student(const string& n, const double *pd, int n): string(n), ArrayDb(pd, n) {}

3.類聲明代碼

最后, 我們來看下完整的類聲明的代碼:

using namespace std;

class Student: string, valarray<double> {
? ?private:
? ? ?typedef valarray<double> ArrayDb;
? ? ?ostream & arr_out(ostream &os) const;
? ? public:
? ? ?Student(): string("null"), ArrayDb() {}
? ? ?explicit Student(const string & s): string(s), ArrayDb() {}
? ? ?explicit Student(int n): string("null"), ArrayDb(n) {}
? ? ?Student(const string& s, int n): string(s), ArrayDb(n) {}
? ? ?Student(const string& s, const ArrayDb& a): string(s), ArrayDb(a) {}
? ? ?Student(const char* str, const double *pd, int n): string(str), ArrayDb(pd, n) {}
? ? ?~Student() {}
? ? ?double Average() const;
? ? ?double & operator[](int i);
? ? ?double operator[](int i) const;
? ? ?const string& Name() const;
? ? ?friend istream & operator>>(istream &is, Student &stu);
? ? ?friend istream & getline(istream &is, Student& stu);
? ? ?friend ostream & operator<<(ostream &os, const Student &stu);
};

到此這篇關(guān)于C++私有繼承(一)的文章就介紹到這了,更多相關(guān)C++私有繼承 內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Qt圖形圖像開發(fā)之QT滾動區(qū)控件(滾動條)QScrollArea的詳細方法用法圖解與實例

    Qt圖形圖像開發(fā)之QT滾動區(qū)控件(滾動條)QScrollArea的詳細方法用法圖解與實例

    這篇文章主要介紹了Qt圖形圖像開發(fā),QT滾動區(qū)控件(滾動條)QScrollArea的詳細方法用法圖解與實例,需要的朋友可以參考下
    2020-03-03
  • C語言示例講解do?while循環(huán)語句的用法

    C語言示例講解do?while循環(huán)語句的用法

    在不少實際問題中有許多具有規(guī)律性的重復(fù)操作,因此在程序中就需要重復(fù)執(zhí)行某些語句。一組被重復(fù)執(zhí)行的語句稱之為循環(huán)體,能否繼續(xù)重復(fù),決定循環(huán)的終止條件
    2022-06-06
  • C語言實現(xiàn)猜數(shù)字的小游戲

    C語言實現(xiàn)猜數(shù)字的小游戲

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)猜數(shù)字的小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-01-01
  • C++設(shè)計模式之迭代器模式

    C++設(shè)計模式之迭代器模式

    這篇文章主要介紹了C++設(shè)計模式之迭代器模式,本文講解了什么是迭代器模式、迭代器模式的代碼實例等內(nèi)容,需要的朋友可以參考下
    2014-10-10
  • 在C++中使用HP-Socket

    在C++中使用HP-Socket

    這篇文章主要介紹了C++中簡單使用HP-Socket,HP-Socket 是一套通用的高性能 TCP/UDP /HTTP 通信 框架 ,包含服務(wù)端組件、客戶端組件和 Agent 組件,廣泛適用于各種不同應(yīng)用場景的 TCP/UDP /HTTP 通信系統(tǒng),下面來看看更具體的介紹吧
    2021-11-11
  • 重學(xué)c/c++之?dāng)?shù)據(jù)存儲詳解(整數(shù)、浮點數(shù))

    重學(xué)c/c++之?dāng)?shù)據(jù)存儲詳解(整數(shù)、浮點數(shù))

    C語言給定了一些基本的數(shù)據(jù)類型,下面這篇文章主要給大家介紹了關(guān)于重學(xué)c/c++之?dāng)?shù)據(jù)存儲(整數(shù)、浮點數(shù))的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-11-11
  • vscode使用cmake時將命令行參數(shù)傳遞給調(diào)試目標(biāo)的方法

    vscode使用cmake時將命令行參數(shù)傳遞給調(diào)試目標(biāo)的方法

    這篇文章主要介紹了vscode使用cmake時將命令行參數(shù)傳遞給調(diào)試目標(biāo),下面介紹了一個示例,將參數(shù)first_arg, second-arg和third arg傳遞給程序(此處需要注意,third arg中間雖然存在空格,但是仍然被視作一個參數(shù)),需要的朋友參考下吧
    2024-03-03
  • C++ string類getline()用法實例詳解

    C++ string類getline()用法實例詳解

    C++ getline()是一種標(biāo)準(zhǔn)庫函數(shù),用于從輸入流中讀取字符串或行,它是<string>標(biāo)頭的一部分,本文介紹C++ string類getline()用法詳解,感興趣的朋友一起看看吧
    2024-03-03
  • libevent庫的使用方法實例

    libevent庫的使用方法實例

    這篇文章主要介紹了libevent庫的使用方法實例,有需要的朋友可以參考一下
    2013-12-12
  • 深入解析C++中類的多重繼承

    深入解析C++中類的多重繼承

    這篇文章主要介紹了深入解析C++中類的多重繼承,包括多重繼承相關(guān)的二義性問題,需要的朋友可以參考下
    2015-09-09

最新評論