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

溫馨提示×

溫馨提示×

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

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

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

亳州市| 黄石市| 横山县| 平和县| 弥渡县| 康乐县| 拉孜县| 温宿县| 甘孜| 四川省| 怀集县| 南昌县| 宣化县| 青河县| 抚宁县| 剑河县| 台江县| 怀来县| 民权县| 英超| 永德县| 鹤壁市| 峨山| 长宁区| 德江县| 东丽区| 绍兴县| 盈江县| 吉木萨尔县| 龙江县| 长沙县| 文成县| 龙南县| 清流县| 保德县| 翁牛特旗| 青阳县| 玉山县| 汽车| 达州市| 安多县|