欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

實例代碼講解c++ 繼承特性

 更新時間:2020年07月02日 15:38:06   作者:綠豆sir  
這篇文章主要介紹了c++ 繼承特性的相關(guān)資料,文中示例代碼非常詳細,幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下

——派生類需要自己的構(gòu)造函數(shù)。

        派生類中可以根據(jù)需要添加額外的數(shù)據(jù)成員和成員函數(shù),甚至可以給予繼承的原成員函數(shù)新的定義。

   基類指針或引用可指向派生對象,反過來則只能使用強制類型轉(zhuǎn)換。

   派生類對象可使用基類的非私有成員。

   可使用派生對象初始化基類對象或賦值。

   一般不允許將基類對象賦給派生類對象(上面第三條),特殊情況下可以。

   已有派生類對象初始化創(chuàng)建的派生類對象。

   已有派生類對象給另一個派生類對象賦值。

   派生類對象的析構(gòu)函數(shù)被調(diào)用后會自動調(diào)用基類的析構(gòu)函數(shù)。

   C++11增加了允許繼承構(gòu)造函數(shù)的機制,但派生類默認不能繼承構(gòu)造函數(shù)和析構(gòu)函數(shù)。

class RatedPlayer : public TableTennisPlayer
 {
 private:
 unsigned int rating; // add a data member
 public:
 RatedPlayer (unsigned int r = 0, const string &fn = "none", const string &ln = "none", bool ht = false);
 RatedPlayer (unsigned int r, const TableTennisPlayer &tp);
 unsigned int Rating() const { return rating; } // add a method
 void ResetRating (unsigned int r) { rating = r; } // add a method
};

       構(gòu)造函數(shù)必須給新成員和繼承的成員提供數(shù)據(jù)。

RatedPlayer::RatedPlayer(unsigned int r, const string &fn, const string &ln, bool ht) : TableTennisPlayer(fn, ln, ht)
{
 rating = r;
}
  • 派生類構(gòu)造函數(shù)必須使用基類構(gòu)造函數(shù),創(chuàng)建派生類對象時,程序首先創(chuàng)建基類對象(初始化繼承的數(shù)據(jù)成員)然后再調(diào)用派生類構(gòu)造函數(shù)。C++使用成員初始化列表語法完成該操作。
  • 如沒有調(diào)用基類構(gòu)造函數(shù),那么將隱式調(diào)用基類的默認構(gòu)造函數(shù)。除非要使用默認構(gòu)造函數(shù),否則應(yīng)顯示調(diào)用正確的基類構(gòu)造函數(shù)。

        派生類對象過期時,程序?qū)⑹紫日{(diào)用派生類析構(gòu)函數(shù),然后再自動調(diào)用基類析構(gòu)函數(shù)。

        要使用派生類,程序必須要能訪問基類聲明。

        派生類對象可以使用基類的方法,條件是方法不是私有的(即公有和保護)。

        基類指針可以在不進行顯示類型轉(zhuǎn)換的情況下指向派生類對象;基類引用可以在不進行顯示類型轉(zhuǎn)換的情況下引用派生類對象

RatedPlayer rplayer(1140, "Mallory", "Duck", true);
TableTennisPlayer &rt = rplayer;
TableTennisPlayer *pt =&rplayer;
rt.Name(); // invoke Name() with reference
pt->Name(); // invoke Name() with pointer

       不可以將基類對象和地址賦給派生類引用和指針,除非使用強制轉(zhuǎn)換(友元函數(shù)不是成員函數(shù)因此不能被繼承,但欲使用基類的友元函數(shù)時可使用此方法,但要小心用錯)。

       基類聲明的函數(shù)引用參數(shù)或指針參數(shù)可用于值為基類對象或派生類對象以及它們的地址的情況。

void Show(const TableTennisPlayer &rt)
{
 ...
}
TableTennisPlayer player1("Tara", "Boomdea", false);
RatedPlayer rplayer1(1140, "Mallory", "Duck", true);
Show(player1); // works with TableTennisPlayer argument
Show(rplayer1); // works with RatedPlayer argument

       省略形參為const TableTennisPlayer *rt的情況,與上相似。

       引用兼容性屬性:可以將基類對象初始化為派生類對象。

RatedPlayer olaf1(1840, "Olaf", "Loaf", true);
TableTennisPlayer olaf2(olaf1);

       匹配的構(gòu)造函數(shù)的原型:

TableTennisPlayer(const RatedPlayer &); // doesn't exit

       類中并沒有該構(gòu)造函數(shù),但存在隱式復(fù)制構(gòu)造函數(shù):

// implicit copy constructor
TableTennisPlayer(const TableTennisPlayer &);

       即它將olaf2初始化為嵌套在RatedPlayer對象olaf1中的TableTennisPlayer對象(使用派生類中嵌套的基類對象對目標基類對象進行初始化)

       同樣,也可以將派生對象賦給基類對象:

RatedPlayer olaf1(1840, "Olaf", "Loaf", true);
TableTennisPlayer winner;
winner = olaf1; // assign derived to base object

      在這種情況下,程序使用隱式重載賦值運算符:

TableTennisPlayer &operator=(const TableTennisPlayer &) const;

       與上類似,使用派生類中嵌套的基類對象對目標基類對象進行按成員賦值。

       特殊的用基類對象給派生類對象賦值的情況

       如果派生類包含了將基類對象轉(zhuǎn)換為派生類對象的構(gòu)造函數(shù),或派生類定義了將基類對象賦給派生類對象的賦值運算符,則可以用派生類對象給基類對象賦值。

       用已有的派生類對象初始化創(chuàng)建的派生類對象

       復(fù)制類成員或繼承的類組件時,則是使用該類的復(fù)制構(gòu)造函數(shù)完成的,對于繼承的基類對象來說也是合適的。

       用已有的派生類對象給另一個派生類對象賦值

       按成員賦值,調(diào)用類成員賦值運算符,使用基類的賦值運算符來對基類組件(繼承的基類對象)進行賦值

       若派生類使用了動態(tài)內(nèi)存分配,派生類的析構(gòu)函數(shù)、復(fù)制構(gòu)造函數(shù)、復(fù)制運算符都必須使用相應(yīng)的基類方法來處理基類元素(顯示調(diào)用基類構(gòu)造函數(shù)和復(fù)制運算符):

  • 對于析構(gòu)函數(shù),這是自動完成的。
  • 對于復(fù)制構(gòu)造函數(shù),這是在初始化成員列表中調(diào)用基類的復(fù)制構(gòu)造函數(shù)來完成的;如果不這么做,將自動調(diào)用基類的默認構(gòu)造函數(shù)。
  • 對于復(fù)制運算符,這是通過使用作用域解析運算符顯示地調(diào)用基類的賦值運算符來完成的:
hasDMA &hasDMA::operator=(const hasDMA &has)
{
 if (this == &hs)
 return *this;
 baseDMA::operator=(hs); // copy base portion
 ...
 return *this; 
}

以上就是實例代碼講解c++ 繼承特性的詳細內(nèi)容,更多關(guān)于c++ 繼承特性的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Qt實現(xiàn)繪制一個簡單多邊形的示例代碼

    Qt實現(xiàn)繪制一個簡單多邊形的示例代碼

    QT提供了圖形繪制接口QPainter,通過該接口可以繪制多種圖形,包括多邊形。本文就來利用它實現(xiàn)繪制一個簡單的多邊形,感興趣的可以嘗試一下
    2022-11-11
  • C語言數(shù)據(jù)結(jié)構(gòu)順序表的進階講解

    C語言數(shù)據(jù)結(jié)構(gòu)順序表的進階講解

    程序中經(jīng)常需要將一組數(shù)據(jù)元素作為整體管理和使用,需要創(chuàng)建這種元素組,用變量記錄它們,傳進傳出函數(shù)等。一組數(shù)據(jù)中包含的元素個數(shù)可能發(fā)生變化,順序表則是將元素順序地存放在一塊連續(xù)的存儲區(qū)里,元素間的順序關(guān)系由它們的存儲順序自然表示
    2022-04-04
  • 關(guān)于c++ 智能指針及 循環(huán)引用的問題

    關(guān)于c++ 智能指針及 循環(huán)引用的問題

    下面小編就為大家?guī)硪黄P(guān)于c++ 智能指針及 循環(huán)引用的問題。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-01-01
  • 數(shù)據(jù)結(jié)構(gòu)串的操作實例詳解

    數(shù)據(jù)結(jié)構(gòu)串的操作實例詳解

    這篇文章主要介紹了數(shù)據(jù)結(jié)構(gòu)串的操作實例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-07-07
  • C/C++關(guān)于實現(xiàn)CAN信號的獲取方法

    C/C++關(guān)于實現(xiàn)CAN信號的獲取方法

    這篇文章主要介紹了C/C++關(guān)于實現(xiàn)CAN信號的獲取方法,標準的CAN 數(shù)據(jù)為8字節(jié),即64位,但是CAN FD的最大數(shù)據(jù)可為64字節(jié),為512位,其中的幀ID分為標準幀和擴展幀,其中用11位標準幀,用29位表示擴展幀
    2023-02-02
  • 實現(xiàn)去除c語言注釋的小工具

    實現(xiàn)去除c語言注釋的小工具

    這篇文章主要介紹了實現(xiàn)去除c語言注釋的小工具,說是C語言,但其實所有C語系的都可以,比如Java,需要的朋友可以參考下
    2014-02-02
  • C語言數(shù)據(jù)結(jié)構(gòu)之單鏈表操作詳解

    C語言數(shù)據(jù)結(jié)構(gòu)之單鏈表操作詳解

    鏈表是一種物理存儲結(jié)構(gòu)上非連續(xù)、非順序的存儲結(jié)構(gòu),數(shù)據(jù)元素的邏輯順序是通過鏈表中的指針鏈接次序?qū)崿F(xiàn)的。本文將和大家一起聊聊C語言中單鏈表的常用操作,感興趣的可以學(xué)習(xí)一下
    2022-07-07
  • C和C++11之enum枚舉的具體使用方法

    C和C++11之enum枚舉的具體使用方法

    這篇文章主要介紹了C和C++11之enum枚舉的具體使用方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • C++ float、double判斷是否等于0問題

    C++ float、double判斷是否等于0問題

    這篇文章主要介紹了C++ float、double判斷是否等于0問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • C語言使用DP動態(tài)規(guī)劃思想解最大K乘積與乘積最大問題

    C語言使用DP動態(tài)規(guī)劃思想解最大K乘積與乘積最大問題

    Dynamic Programming動態(tài)規(guī)劃方法采用最優(yōu)原則來建立用于計算最優(yōu)解的遞歸式,并且考察每個最優(yōu)決策序列中是否包含一個最優(yōu)子序列,這里我們就來展示C語言使用DP動態(tài)規(guī)劃思想解最大K乘積與乘積最大問題
    2016-06-06

最新評論