通過繼承:
1.可以在已有的類的基礎上新增新的功能;
2.可以在已有的類的基礎上新增新的變數;
3.可以修改類的方法;(不常用)
什麼時候需要用到繼承?
1.建立乙個新的類的時候,這個類與現有的類相似(只是多出若干成員變數或成員函式時候)
2.當你建立多個類的時候,擁有很多相似的成員函式或者成員變數,
可以將這幾個類中通用的部分提取出來作為乙個基類。
(節省**節省**)
繼承許可權:
class car{};
class bmw:《繼承許可權》 car{};
class 派生類名:《繼承許可權》 基類名
封裝許可權預設是private 繼承許可權預設依然是private
public繼承方式:
1)基類中public成員在派生類中為public屬性;
2)基類中protected成員在派生類中為protected屬性;
3)基類中private成員在派生類不能使用;
protected繼承方式:
1)基類中public成員在派生類中為protected屬性;
2)基類中protected成員在派生類中為protected屬性;
3)基類中private成員在派生類不能使用;
private繼承方式:
1)基類中public成員在派生類中為private屬性;
2)基類中protected成員在派生類中為private屬性;
3)基類中private成員在派生類不能使用;
引出protected成員的目的:
使得基類的一些成員能夠被他的派生類所使用,又不被外界訪問(不破壞類的封裝性)。
注意點:
建構函式/析構函式/友元關係/過載的new/delete
初始化成員列表:
1.組合物件(乙個類的物件是另乙個類的成員變數)
2.const成員變數
(1,2用的都是成員變數名)
3.初始化基類中繼承過來的成員變數(用的是類名)
初始化成員列表構造順序:
1.基類
2.組合物件(先宣告先構造)
3.自己
4.析構與構造順序相反
私有繼承-組合物件 相同/不同
相同:都可以表示「有乙個」的關係
不同:私有繼承中派生類可以訪問基類的protected成員;
可以重寫基類的虛函式(甚至當基類是抽象類的時候)
組合物件並不具有這些功能
盡可能使用組合物件 萬不得已再用私有繼承
成員覆蓋:
派生類**現與基類中繼承的成員變數名稱相同的成員,
會覆蓋繼承過來的成員(預設呼叫派生類中同名成員)
如何呼叫被覆蓋成員:
類名::成員變數;
物件名.類名::成員函式
派生類中的static關鍵字;
1.基類定義的靜態成員,將被所有派生類共享
2.根據靜態成員自身的訪問特性和派生類的繼承方式,
在類層次體系中具有不同的訪問性質 (遵守派生類的訪問控制)
3.訪問方式 類名 :: 成員
物件.成員 (任意物件)(共享機制)
共享機制 : 任意物件共享 + 派生類共享
多繼承:
class 派生類名:《繼承許可權》 基類名,《繼承許可權》 基類名…
建構函式:
先構造基類後構造派生類;
基類構造順序根據派生時順序決定的;
(class colu:public rectangle,public circle)
int myadd(int x,int y)
int myadd(int x,int y,int z=10)
多繼承中的名稱衝突:
如果不同基類**現相同的成員變數或者成員函式
那麼在派生類中或外部呼叫時候 會出現二義性.
需要明確一下是呼叫那個類中的成員 用"類名::"處理
namespace中域解析符可以連用 ns2::ns3::…
繼承關係中 域解析符不可以連用 base::derived1::derived2::…
為什麼使用虛繼承:
如果乙個派生類(c)從多個基類(b1 b2)派生出來,
並且這些基類(b1 b2)有乙個共同的基類(b)
則在對該基類(b)某個成員進行訪問時 會出現二義性。
(原因,因為乙個基類被繼承多次的時候,會建立多個副本,出現名稱衝突)
虛繼承(virtual)
當將乙個基類宣告為虛基類的時候,不管他在派生類中被繼承多少次,
該基類中的成員在該派生類中始終都只有乙個副本。
語法:class 派生類名:virtual 《繼承許可權》 基類名
虛基類的初始化順序
/*class base1
class base2
class derived1:public base2,virtual public base1
class derived2:public base2,virtual public base1
class top:public derived1,virtual public derived2
base1① base2② derived1③ derived2④ top⑤
呼叫順序:1 2 4 2 3 5
*/
#include
using
namespace std;
class
base1};
class
base2};
class
derived1
:public base2,
virtual
public base1};
class
derived2
:public base2,
virtual
public base1};
class
top:
public derived1,
virtual
public derived2};
intmain()
Python學習日記day4
turtle庫的使用 知識點1 turtle的繪圖窗體,螢幕左上角的座標為 0,0 turtule.setup width,height,startx,starty 設定窗體大小及位置。基本繪圖中,setup函式並不是必須的。知識點2 turtle空間座標體系。turtle最開始位於正中心。turt...
Day4學習日記執行緒(上)
外鏈轉存失敗,源站可能有防盜煉機制,建議將儲存下來直接上傳 img hdjbpjnb 1606229624152 c users wuvcky desktop image 20201124171107079.png package new public class newthread extends...
linux移植日記 day4
1 teq r if rs rt then trap 2 teqi i if rs imm then trap 3 tge if rs rt then trap 4 tgei i if rs imm then trap 5 tgeiu i if rs imm.asuint then trap 6 t...