中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

C++ 繼承(一)

發布時間:2020-07-12 03:20:59 來源:網絡 閱讀:409 作者:Aonaufly 欄目:編程語言

C++繼承的標準寫法:

class BaseMonster
{
public:
    string name;
    string skill;
    uint32_t hp;
    void attack()
    {
        cout << "Base :: 發動***" << endl;
    }
};
class RedDemonKing : public BaseMonster
{
} ;

解析:

① 類 RedDemonKing 集成了 類BaseMonster

② 集成的限定詞為 public->

    C++ 繼承(一)

③ 對限定詞的解析->

采用降級處理 : 級別從高到低(降序) public , protected , private 。如采用public,則基類中比public高的成員,全部降一級(因為沒有比public高的級別 , 所以都不降級。但是protected的話 , 基類中的public在子類中的訪問級別就降了一級變成protected)。

④ 如果省略繼承的限定詞,則默認為private限定詞。


C++ 繼承(一)


具體:

一,繼承構造函數的調用順序->先調用父類的構造函數,再調用子類(自己)的構造函數

1,當基類的構造函數為無參構造:

#include <iostream>
using namespace std;
class BaseMonster
{
public:
    string name;
    string skill;
    uint32_t hp;
    void attack()
    {
        cout << "Base :: 發動***" << endl;
    }
};
class RedDemonKing : public BaseMonster
{
} ;
int main()
{
    RedDemonKing rdk;
    rdk.name = "赤妖王";
    cout << rdk.name << endl;
    return 0;
}

2,當基類有有參數的構造函數時:

#include <iostream>
using namespace std;
class BaseMonster
{
public:
    string name;
    string skill;
    BaseMonster( string name )
    {
        this->name = name;
    }
    void attack()
    {
        cout << "Base :: 發動***" << endl;
    }
};
class RedDemonKing : public BaseMonster
{
public:
    RedDemonKing( string name ) : BaseMonster(name)
    {
        this->skill = "會心一擊";
    }
} ;
int main()
{
    RedDemonKing rdk("赤妖王");
    cout << rdk.name << endl;
    return 0;
}

解析:

① RedDemonKing( string name ) : BaseMonster(name)  , 以此格式(參數列表)為調用基類構造。


二,覆蓋

#include <iostream>
using namespace std;
class BaseMonster
{
public:
    string name;
    string skill;
    BaseMonster( string name )
    {
        this->name = name;
    }
    void attack()
    {
        cout << "Base :: 發動***" << endl;
    }
};
class RedDemonKing : public BaseMonster
{
public:
    string name;
    RedDemonKing( string name ) : BaseMonster(name)
    {
        this->name = "赤妖王";
        this->skill = "會心一擊";
    }
} ;
int main()
{
    RedDemonKing rdk("妖怪");
    cout << rdk.name << endl;
    cout << rdk.BaseMonster::name << endl;
    return 0;
}

解析:

① 當子類和基類有相同名字的成員如上(name),那么子類的name就對積累的name形成了覆蓋(相當與作用域)

② 默認取值 rdk.name , 取得是子類(自己)的值 。 如果要取基類的值需指定域 : rdk.BaseMonster::name

③ 重點 , 只要是名字一樣都會形成覆蓋,不存在重載:

    C++ 繼承(一)

要調用基類的函數 必須指定域


firend(友元)不能被繼承( 可以這么理解 : 父親的朋友 , 不一定是自己的朋友 )

向AI問一下細節

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

AI

噶尔县| 阿拉尔市| 苏尼特右旗| 宜春市| 阿合奇县| 华池县| 宝坻区| 荔波县| 娱乐| 珠海市| 出国| 廉江市| 云龙县| 罗源县| 高要市| 西充县| 城市| 涞源县| 丹阳市| 遂昌县| 浦城县| 福海县| 克什克腾旗| 隆子县| 微山县| 甘洛县| 前郭尔| 海兴县| 融水| 淳化县| 当阳市| 连平县| 四会市| 屯门区| 庐江县| 涞源县| 新密市| 正镶白旗| 都昌县| 仪陇县| 鹿邑县|