父類和子類之間是繼承的關係,子類擁有父類的一切屬性、又有自己獨有的屬性。我們都知道把double賦給float會發生精度縮小的問題,那麼用子類物件去初始化父類物件會發生什麼呢?看下面一段**:
#include
"stdio.h"
class
parent};
class
child
:public parent};
intmain
(int argc ,
char
*ar**)
看到**裡的注釋,用子類物件初始化父類物件之後呼叫print(),要麼列印「i'm child」,
要麼列印「i'm parent」
,按照我們對於長精度變數賦值給短精度變數會縮小精度的經驗,這裡很可能也發生這種精度縮小的改變!
**執行一下:
賦值相容還有一種表現形式,看一段**:
#include
"stdio.h"
class
parent};
class
child
:public parent};
void
judge_which_exec
(parent *p)
//父類物件指標作為函式引數
intmain
(int argc ,
char
*ar**)
我們使用函式
void judge_which_exec(parent *p) //父類物件指標作為函式引數
作為物件切換的中轉,想要達成傳入子類物件時列印子類的print();傳入父類物件時,列印父類的print(),這樣的目的,執行一下,看看能否達到我們的目的?
輸出完全對不上預期,竟然都執行了父類中的print(),為什麼呢?仔細分析一下發現,在void judge_which_exec(parent *p)
函式中,父子類的賦值相容原則依然適用!所以子類還是退化成了父類。
王雄 首次更新於2021.03.09
C 父子類間的衝突(3) 多型
c 三大特性之一就是 多型 多型 咋一聽很高大上,其實是很容易理解的。我們先直白地理解 多型就是乙個事物有很多種狀態,帶入到c 中,結合之前對於重寫和過載的理解,我們是不是有理由懷疑函式過載就是c 中的一種多型?include stdio.h class parent class child pub...
C 父子類間的衝突(1) 同名覆蓋問題
我們都知道c 有三大特性,封裝 繼承 多型。今天講一下多型。首先我們先了解一下父子類之間的同名覆蓋問題。先看一段 include stdio.h class parent int mi class child parent int mi intmain int argc char ar 我在父類pa...
C 深度剖析教程26 父子間的衝突
今天繼續來學習c 父類與子類之間的衝突。加qq1126137994共同學習交流。子類中是否可以定義父類中的同名成員,如果可以,如何區分?如果不可以那又為什麼?下面還是以乙個簡單的例子,來說明上述幾點的正確性 include include using namespace std class pare...