您好,登錄后才能下訂單哦!
C++繼承的標準寫法:
class BaseMonster { public: string name; string skill; uint32_t hp; void attack() { cout << "Base :: 發(fā)動***" << endl; } }; class RedDemonKing : public BaseMonster { } ;
解析:
① 類 RedDemonKing 集成了 類BaseMonster
② 集成的限定詞為 public->
③ 對限定詞的解析->
采用降級處理 : 級別從高到低(降序) public , protected , private 。如采用public,則基類中比public高的成員,全部降一級(因為沒有比public高的級別 , 所以都不降級。但是protected的話 , 基類中的public在子類中的訪問級別就降了一級變成protected)。
④ 如果省略繼承的限定詞,則默認為private限定詞。
具體:
一,繼承構造函數的調用順序->先調用父類的構造函數,再調用子類(自己)的構造函數
1,當基類的構造函數為無參構造:
#include <iostream> using namespace std; class BaseMonster { public: string name; string skill; uint32_t hp; void attack() { cout << "Base :: 發(fā)動***" << 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 :: 發(fā)動***" << 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 :: 發(fā)動***" << 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
③ 重點 , 只要是名字一樣都會形成覆蓋,不存在重載:
要調用基類的函數 必須指定域
firend(友元)不能被繼承( 可以這么理解 : 父親的朋友 , 不一定是自己的朋友 )
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。