C 類中的靜態字段始終繼承自基類

2022-02-06 14:47:57 字數 1592 閱讀 7629

我們試想一下現在有乙個類parent,它有乙個static的int型別欄位number,然後如果類parent有三個子類child01、child02和child03,那麼改變parent.number的值的話,child01.number、child02.number和child03.number的值也會被更改嗎?

新建乙個.net core的控制台專案,我麼來看看如下**:

using

system;

namespace

//////

child01繼承父類parent

/// class

child01 : parent

//////

child02繼承父類parent

/// class

child02 : parent

//////

child03繼承父類parent

/// class

child03 : parent

class

program}}

結果如下:

很明顯類parent、child01、child02、child03的number變數實際上都是指向的記憶體中棧(stack)的相同位址,也就是說類child01、child02和child03在繼承parent類後,並不是在記憶體中新建了三個變數child01.number、child02.number和child03.number,而是使用的同乙個parent.number變數。

然後現在我們將**改成如下:

using

system;

namespace

//////

child01繼承父類parent,並定義自己的number變數,隱藏父類parent的number變數

/// class

child01 : parent

//////

child02繼承父類parent,並定義自己的number變數,隱藏父類parent的number變數

/// class

child02 : parent

//////

child03繼承父類parent,並定義自己的number變數,隱藏父類parent的number變數

/// class

child03 : parent

class

program}}

現在我們在子類child01、child02和child03中分別定義了自己的number變數,並用關鍵字new隱藏了父類parent的number變數,我們來看看現在執行的結果:

很明顯,由於子類child01、child02和child03中都有了各自的number變數,現在相當於這三個子類在記憶體中新建了三個變數child01.number、child02.number和child03.number,所以現在每個類中number變數都擁有了不同的值。

所以請記住c#類中子類繼承父類後,其和父類使用的是相同的靜態字段,子類並不會和父類在記憶體中使用不同的靜態字段。

c 基類指標指向繼承類呼叫繼承類函式

類裡面過載運算子 需要使用友元函式,而友元函式,不能作為虛函式。所以,基類指標無法直接呼叫繼承類裡重構的 使用類轉換,能解決掉,基類指標 呼叫 繼承類 函式的問題。include include include using namespace std class person friend istr...

類的靜態字段

程式原始碼 邵文政 2015 10 17 記錄建立對向的個數 public class objictnumber int number public objictnumber number system.out.println 目前建立了 number 個物件 public static void ...

C 虛基類 虛擬繼承

虛基類建構函式的引數必須由最新派生出的類負責初始化,即使不是直接繼承,示例程式的虛基類的建構函式只執行一次 include include include using namespace std class base class base1 virtual public base class bas...