C 繼承時子類父類同名成員變數的問題

2021-06-23 07:43:47 字數 642 閱讀 3459

**如下:

c/c++ code

#include

<

iostream.h

>

class

base

intprint()

~base()

};class

******:

public

base

~******()

/*print()

;main()

輸出結果是0,1。而不是1,1。為什麼不同呢?

解釋:因為在繼承的時候,允許子類存在與父類同名的成員變數,但是並不覆蓋父類的成員變數,他們同時存在。

首先在base裡面有乙個 a 變數,然後在******裡面又有乙個 a 變數。在孩子類建立物件時,會先呼叫父類的建構函式,先為父類的 a 變數初始化,然後呼叫孩子類的建構函式來初始化自己的變數,因為給孩子類中沒有定義print函式,所以會按照就近原則去尋找父類中是否有print函式。恰好父類中有這個函式,於是呼叫父類的print函式b.print(),而這個函式會呼叫父類的a變數。

b.a就就近呼叫孩子類的a變數。

按照就近原則呼叫,如果自己的類中定義了介面就呼叫自己的,如果沒有就去父類、祖父類....... 去找,然後呼叫。

C 子類和父類同名成員變數或函式

在c 中子類和父類同名成員時候c 版本不同處理的方式也不同。下面是我使用visual c 2015 update 3的測試結果 測試 如下 include using namespace std class base virtual void print base class public base...

java 父類子類繼承 同名變數 同名方法

無意中發現的這個有趣的問題。觀察下列 父類和子類中都定義有 string name變數,那最終繼承之後是不是只剩下1個name?還是父類子類的name互相不相干?通過賦值後,最後會輸出什麼?見如下 public class son extends parent public static void ...

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 ...