同名覆蓋引發的問題

2022-08-30 13:39:13 字數 1402 閱讀 2491

子類物件可以直接賦值給父類物件

子類物件可以直接初始化父類物件

父類指標可以直接指向子類物件

父類引用可以直接引用子類物件

//

同名覆蓋引發的問題.cpp : 此檔案包含 "main" 函式。程式執行將在此處開始並結束。

//#include class

parent

void add(int

x)

void add(int x,int

y)

};class child :public

parent

void add(int x, int y, int

z)

};int

main()

子類物件退化為父類物件

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

可以直接訪問被子類覆蓋的同名成員

子類中可以重定義父類中已經存在的成員函式

這種重定義發生在繼承中,叫做函式重寫

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

class

parent

};class child :public

parent

};

#include #include 

using

namespace

std;

class

parent

void add(int

x)

void add(int x,int

y)

void

printf()

};class child :public

parent

void add(int x, int y, int

z)

void

print()

};void how_to_printf(parent*p)

intmain()

i'

m parent

i'm parent

在編譯期間,編譯器只能根據指標得型別判斷所指向的物件,根據賦值相容,編譯器認為父類指標指向的是父類物件,因此,編譯結果只可能是呼叫父類中定義的同名函式

void how_to_print(parent*p)

在編譯這個函式的時候,編譯器不可能知道指標p究竟指向了什麼。但是編譯器沒有理由報錯。於是,編譯器認為最安全的做法是呼叫父類的print函式,因為父類和子類肯定有相同的print函式

子類物件可以當作父類物件使用(賦值相容)

父類指標可以正確的指向子類物件

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

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

48 同名覆蓋引發的問題

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

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

1.1 子類物件可以 直接賦值 給父類物件 1.2 子類物件可以 直接初始化 父類物件 1.3 父類指標 可以直接指向子類物件 應該只能使用裡面相同的成員吧?1.4 父類引用 可以直接引用子類物件 子類物件的相容性 include include using namespace std class ...

C 48 同名覆蓋引發的問題

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