子類物件可以當做父類物件使用(相容性)
上述**中,當使用父類指標(引用)指向子類物件的時候
子類物件退化為父類物件
只能訪問父類中定義的成員
可以直接訪問被子類覆蓋的同名成員
子類重定義父類中已經存在的成員函式,並且是在繼承中,這樣叫做函式重寫。
函式重寫是同名覆蓋中特殊的一種情況。
class parent
};class child : public parent
};
問題:當函式重寫遇到賦值相容會發生什麼?
#include #include using namespace std;
class parent
void add(int a, int b)
void print()
};class child : public parent
void print()
};void how_to_print(parent* p)
int main()
上述結果都是列印 :
i'm parent
問題分析:
引發的思考:編譯器的處理方式是合理的的嘛?是期望的嘛?
想法:
實際中 當子類重寫父類乙個函式,就是認為父類的函式滿足不了子類的需求。但是實際結果卻不是這樣的,所以不是期望的。
這就是 為什麼引出虛函式的原因了!
子類物件可以當做父類物件使用(賦值相容性)
父類的指標(引用)可以正確的指向(代表)子類物件。
子類可以重寫父類中的成員函式。
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 ...
同名覆蓋引發的問題
子類物件可以直接賦值給父類物件 子類物件可以直接初始化父類物件 父類指標可以直接指向子類物件 父類引用可以直接引用子類物件 同名覆蓋引發的問題.cpp 此檔案包含 main 函式。程式執行將在此處開始並結束。include class parent void add int x void add i...