C 父子類間的衝突(2) 賦值相容

2021-10-21 15:34:56 字數 1226 閱讀 8641

父類和子類之間是繼承的關係,子類擁有父類的一切屬性、又有自己獨有的屬性。我們都知道把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...