C 父子類間的衝突(1) 同名覆蓋問題

2021-10-21 12:32:25 字數 1177 閱讀 4621

我們都知道c++有三大特性,封裝、繼承、多型。今天講一下多型。首先我們先了解一下父子類之間的同名覆蓋問題。

先看一段**:

#include

"stdio.h"

class

parent

int mi;};

class

child

:parent

int mi;};

intmain

(int argc ,

char

*ar**)

我在父類parent中定義了mi變數,在子類child中也同樣定義了mi變數,這時,子類物件child c;按照我們的預期應該會列印子類中的mi變數值,看看輸出:

確實如我們所想,列印了子類的mi值。child c是繼承自parent的,parent中也是有mi變數的,那父類中的mi變數是就此被覆蓋了嗎?當然不是!父類中的變數是被「隱藏」了,但確真實存在,如果子類物件要呼叫父類中的同名變數,採用這種方式:c.parent::mi

這裡是同名的變數,我們是否能夠延伸到同名的函式也能得到這個結論呢?看一段**:

#include

"stdio.h"

class

parent

void

print()

void

print

(int a)

void

print

(int a ,

int b)

int mi;};

class

child

:public parent

void

print

(int a)

void

print

(int a ,

int b,

int c )

int mi;};

intmain

(int argc ,

char

*ar**)

輸出如圖所示:

我們可以得出這樣的結論:

王雄 首次更新於2021.03.08

C 父子類間的衝突(3) 多型

c 三大特性之一就是 多型 多型 咋一聽很高大上,其實是很容易理解的。我們先直白地理解 多型就是乙個事物有很多種狀態,帶入到c 中,結合之前對於重寫和過載的理解,我們是不是有理由懷疑函式過載就是c 中的一種多型?include stdio.h class parent class child pub...

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

父類和子類之間是繼承的關係,子類擁有父類的一切屬性 又有自己獨有的屬性。我們都知道把double賦給float會發生精度縮小的問題,那麼用子類物件去初始化父類物件會發生什麼呢?看下面一段 include stdio.h class parent class child public parent i...

C 子類函式對父類同名函式的覆蓋

class b public void f int const cout b.int endl void f double const cout b.double endl class d public b public void f void const cout d.void endl int ...