**如下:
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 ...