導航:
1.繼承的基礎語法
2.繼承的方式(成員屬性及成員函式)
3.子類繼承父類時,建構函式及析構函式的順序
4.繼承同名的成員關係,如何訪問
5.訪問同名靜態成員
6.多繼承語法
7.菱形繼承
繼承的基礎語法
當我們寫類的時候,如果每個類都有相同的部分,那麼通過乙個個將其中的內容乙個個敲出來將會十分佔空間,那麼我們就會用到繼承
方法:將公共的內容專門寫出乙個類出來,然後寫別的子類時候,加入公共部分即可。
語法:class 子類:繼承方式 父類
(其中子類又叫做派生類,父類叫做基類)
下面看例子:
#include
#include
using
namespace std;
//這裡是公共的部分,也就是下面子類都共有的部分,先寫出來
class
basepage
void
foot()
void
left()
};//子類c++
class
cpp:
public basepage //這裡就可以將公共的部分新增至類中,減少重複內容};
classpy:
public basepage //這裡同樣也是};
void
test()
intmain()
執行程式:
好處:可以減少很多在子類中重複的內容
———————————————————————————————————
繼承方式
公共繼承 保護繼承 私有繼承
若子類公共繼承父類,那麼除了父類的私有屬性訪問不到其餘與父類對應繼承
若子類保護繼承父類,那麼除了父類的私有屬性訪問不到其餘都為保護繼承
若子類私有繼承父類,那麼除了父類的私有屬性訪問不到其餘都為私有繼承
注意在類外,對於類的保護屬性以及私有屬性都不能訪問及修改,公共屬性可以訪問及修改
例子:
#include
#include
using
namespace std;
class
father
;//公共繼承
class
son1
:public father};
void
test01()
//保護繼承
class
son2
:protected father};
void
test02()
//私有繼承
class
son3
:private father};
void
test03()
intmain()
———————————————————————————————————
父類中的所有非靜態成員屬性都會被子類繼承下去
父類中私有成員屬性也會被繼承下去,只不過是被編譯器隱藏了
子類繼承父類時,建構函式與析構函式的順序?
答:當子類繼承父類的時候,先呼叫父類建構函式,再呼叫子類建構函式,析構函式與其相反
———————————————————————————————————
繼承同名的成員關係
1.子類物件可以直接訪問到子類中同名成員
2.子類物件加作用域可以訪問到父類同名成員
3.當子類與父類擁有同名的成員函式,子類會隱藏掉父類中同名的成員函式,加作用域可以訪問到父類的成員函式
例子:
#include
#include
using
namespace std;
//父類
class
father
void
func()
void
func
(int a)
int a;};
//子類進行公共繼承父類
class
son:
public father
void
func()
int a;};
//子類父類同名成員屬性時候
void
test()
//同名成員函式
void
test01()
intmain()
———————————————————————————————————
訪問同名靜態成員,與非靜態相似
例子:
#include
#include
using
namespace std;
//定義乙個父類
class
base
static
void
func
(int a)
static
int a;};
int base::a =
100;
//定義乙個子類
class
son:
public base
static
int a;
//類內靜態變數初始化};
int son::a =
200;
//訪問靜態成員屬性
void
test01()
//訪問靜態成員函式
void
test02()
intmain()
———————————————————————————————————
多繼承語法:class 子類:繼承方式 父類1,繼承方式 父類2 {};
例子:
#include
#include
using
namespace std;
class
base1
//父類1
int m_a;};
class
base2
//父類2
int m_a;};
class
son:
public base1,
public base2 //繼承兩個父類
int m_a;
int d;};
void
test()
intmain()
總結:多繼承下訪問父類繼承下來同名要加作用域
———————————————————————————————————
菱形繼承
形成條件:
1.兩個派生類繼承乙個基類
2.乙個類再繼承兩個派生類
這個就叫做菱形繼承,也叫做鑽石繼承
問題:此時這個類便產生了兩義性
解決:
1.在繼承之前加virtual,此時父類又稱為虛基類
2.此時可以直接訪問這個類的成員屬性
例子:
#include
#include
using
namespace std;
class
animal
;class
sheep
:virtual
public animal
;//下面兩個派生類繼承乙個基類
class
tuo:
virtual
public animal
;class
sheeptuo
:public sheep,
public tuo
;//乙個類再繼承兩個派生類,此時便有了二義性,有兩個m_age
void
test01()
intmain()
執行程式:三個年齡都為15,是按照最後賦值的結果來進行指向的。 C 繼承相關知識點
c 作為物件導向的語言,類之間可以繼承,被繼承的類稱為基類 父類 產生的新類稱為派生類 子類 c 的類許可權分為三個等級,private 私有的 protect 被保護的 public 公有的 其相對應的繼承的許可權也分為相同的三個等級,即private,protect以及public繼承。這三類繼...
C 中繼承的相關知識點總結
1.oop中的乙個重要概念就是繼承,它允許程式從已有類派生出新類。新類自動繼承已有類的資料成員與成員函式 2.派生類不會繼承建構函式 拷貝建構函式 析構函式或其他過載的賦值運算子 3.在例項化派生類物件時,基類建構函式在派生類構造函式呼叫之前自動呼叫 4.在銷毀派生類物件時,基類析構函式在派生類析構...
c 相關知識點
類繼承 基類指標與引用可以隱示的指向派生類的物件,但只能使用基類的函式。多型屬於豎向函式過載,派生類函式的名與基類函式得名一樣,但在呼叫多態函式時有些區別,如果該函式是通過引用或者指標而不是物件呼叫的,如果這個函式在多型過程中沒有使用關鍵字virtual那麼程式將根據引用或者指標選擇實現方法。如果函...