1.子類繼承父類的繼承方式:public,private,protected,不寫則預設為private;
2.子類會繼承父類的全部成員(除了建構函式、析構函式,雖然析構函式有virtual,但是不是繼承的意思),全盤接受,沒得選,不能只繼承一部分,而不繼承另一部分,這樣就可能造成資料冗餘,在繼承時可能會繼承了一大堆沒用的東西,這個問題目前的c++也無法解決,所以繼承時父類的選擇要謹慎。但是,可以改變繼承的成員在子類中的訪問屬性,即可能全盤繼承了父類的成員之後訪問不了!!! 3.
父類中的訪問屬性
繼承方式
子類中的訪問屬性
private
public/protected/private
不可訪問
public
public
public
public
protected
protected
public
private
private
protected
public
protected
protected
protected
protected
protected
private
private
4.protected成員在本類內相當於private,但是在子類中就不一樣了,子類中可以訪問父類的protected成員。若某類宣告了protected成員,就說明這個類可能要當作父類,是為了繼承做準備的。
5.類外可訪問類的public成員,不可訪問類的private和protected成員。
6.建構函式是為了初始化類的資料成員,可以不自己定義,這樣系統就會自動設定預設建構函式,也可以自己定義。因為建構函式不能繼承,所以子類在初始化時要同時初始化父類,一般是在定義子類建構函式時呼叫父類的建構函式,宣告子類建構函式時不用加上父類建構函式。
形式:子類建構函式名(總參數列,即所有引數):父類建構函式名(參數列)
e.g.
student1(int n,string nam,char s,int a,string ad):student(n,nam,s)
上述student為父類,student1為子類。
這種方式其實和建構函式的初始化列表是一樣的,如
box(int h,int w,int l):height(h),width(w),length(len)
其實就是利用初始化表呼叫父類的建構函式,也可以將兩者結合起來,即既有初始化表,也有父類構造函式呼叫,如
student1(int n,string nam,char s,int a,string ad):student(n,nam,s),age(a),addr(ad)
若乙個類的資料成員中包括類物件,即物件中的物件,則可用如下方式定義:
student1(int n,string nam,int n1,string nam1,string ad):student(n,nam),monitor(n1,nam1)
上述monitor為student1中的物件(student型別的)。
7.子類和父類的轉換:可以把子類的物件賦值給父類的物件,而不能反過來(沒有指標的事)。
指向父類物件的指標也可以指向子類,但是只能訪問子類中從父類繼承的部分,不能訪問子類自己新增的部分。若父類指標指向子類,則指標型別自動轉換,由子類轉為父類(e.g. father* p=new son;),這樣,指標指向的就是子類中的父類部分。
8.類的組合:乙個類中的資料成員包含另乙個類的物件,類的組合是橫向的,說明了是否擁有某一屬性。類的繼承是縱向的,說明了是否屬於某一事物。組合和繼承是軟體重用的重要方式。
C 繼承時派生類的成員訪問屬性
公用 public 訪問許可權最高 除派生類外,外部函式也可以直接訪問 無論是成員變數還是成員函式 私有 private 訪問許可權最低 只能是該類內部函式互相呼叫,派生類 外部函式都不能訪問。保護 protect 訪問許可權中間 該類內部函式 派生類都能訪問,外部類 外部函式不能訪問 我們這樣來記...
C 繼承與派生訪問許可權
觀察下邊一段 class a int i protected void f2 int j private int k class b public a protected int m private int n class c public b private int p 全是公用繼承,思考這樣幾個...
c 學習 繼承 派生類的建構函式
1.在派生類中,預設基類的建構函式是不被繼承的,派生類需要構造自己的建構函式。ps 在c 11中,定義可以使用using語句來繼承基類的建構函式。但它不能初始化派生類新增成員。2.派生類建構函式需要完成的任務 不繼承基類建構函式的情況 1 派生類新增成員 派生類定義建構函式初始化 2 繼承來的成員 ...