第48課 同名覆蓋引發的問題

2021-08-14 20:02:28 字數 1725 閱讀 3369

1.1、

子類物件可以

直接賦值

給父類物件

1.2、

子類物件可以

直接初始化

父類物件

1.3、

父類指標

可以直接指向子類物件(應該只能使用裡面相同的成員吧?)

1.4、

父類引用

可以直接引用子類物件

/*********************    子類物件的相容性      ********/

#include

#include

using namespace std;

class parent

void add(int a, int b)  //parent中兩個add構成過載關係

};/*

因child出現了以add命名的函式(只要有乙個與父類同名的函式),所以父類的所有名為add的函式在子類中都會被隱藏起來。子類的同名覆蓋

*/class child : public parent

};int main()

2.1、

子類物件

退化為

父類物件

2.2、只能訪問父類中定義的成員    

2.3、

可以

直接訪問

被子類覆蓋的同名成員

3.1、

子類中可以重定義父類中己經存在的成員函式,這種重定義發生在繼承中,稱為

「函式重寫」

3.2、

函式重寫是同名覆蓋的一種特殊情況。

/********************  賦值相容問題 ****************/

#include

#include

using namespace std;

class parent

void add(int a, int b)  //parent中的兩個add構成過載關係

void print()

};/*

因child出現了以add命名的函式(只要有1個與父類同名的函式),所以父類的所有名為add的函式

在子類中都會被隱藏起來

*/class child : public parent

void print()

};/*

編譯以下函式時,編譯器不可能知道指標p究竟指向了什麼,但是編譯器沒有理由報錯,於是,他認為最安全的做法是呼叫父類的print函式,因為父類和子類肯定都有相同的print函式(傳&c時,子類指標退化為父類指標)

*/void how_to_print(parent* p)        //全域性函式

int main()

4.1、

子類物件可以當作父類物件使用(

賦值相容

4.2、

父類指標可以正確的指向子類物件(因為退化的原因,實際呼叫父類的成員或函式。)

4.3、

父類引用可以正確的代表子類物件

4.4、

子類中可以重寫父類中的成員函式

48 同名覆蓋引發的問題

父子間的賦值相容性原則 子類物件可以當作父類物件使用 相容性 子類可以直接賦值給父類物件,子類物件可以直接初始化父類物件,父類指標可以直接指向子類物件,父類引用可以直接引用子類物件。include include using namespace std class parent void add i...

C 48 同名覆蓋引發的問題

子類物件可以當做父類物件使用 相容性 上述 中,當使用父類指標 引用 指向子類物件的時候 子類物件退化為父類物件 只能訪問父類中定義的成員 可以直接訪問被子類覆蓋的同名成員 子類重定義父類中已經存在的成員函式,並且是在繼承中,這樣叫做函式重寫。函式重寫是同名覆蓋中特殊的一種情況。class pare...

同名覆蓋引發的問題

子類物件可以直接賦值給父類物件 子類物件可以直接初始化父類物件 父類指標可以直接指向子類物件 父類引用可以直接引用子類物件 同名覆蓋引發的問題.cpp 此檔案包含 main 函式。程式執行將在此處開始並結束。include class parent void add int x void add i...