C 含有繼承類的情況下如何統計基類物件的個數

時間 2021-06-06 17:54:28

1樓:

在基類建構函式內將this指標存入容器如

class

IBase

virtual

~IBase

()private

:static

std::

vector

*>ThisHolder

;static

std::

size_t

GetBaseObjectCount

();};

std::

vector

*>IBase

::ThisHolder

;然後利用typeid的多型性判斷這些this指標的最終派生類是否是基類本身

std::

size_t

IBase

::GetBaseObjectCount

());}

2樓:暮無井見鈴

正常來說,基類的建構函式不知道自己是不是在構造最終派生物件。

不過有個做法,需要使用者約定:

給基類加一些帶上特定標籤型別的建構函式,其行為同不帶標籤者,除了不增加 count 。

把這些標籤建構函式設為 protected ,以免外部構造基類物件時呼叫。約定派生類建構函式構造基類子物件時均需呼叫這些標籤建構函式。

3樓:wang

OOP 的哲學裡,派生類和基類的關係要符合 "is a"

拿「馬」作為基類舉例,白馬也是馬,黑馬也是馬,你現在等於說是要在建立白馬或黑馬時,讓「馬」的計數不增加,這不合情理吧。

基類描述的是一類共同特徵,一般不會直接構造乙個基類出來的,因為「馬」它總有個具體品種,不可能說只構造出一匹馬,什麼具體特徵都沒有。

如果確實有這樣的需求,八成是類設計出了問題,你可能真正需要的是再建立乙個派生類叫「未知品種馬」,計數應這個類裡進行,凡是直接建立基類本身的場景其實都應該建立這個類。

C 語言如何在不重新執行的情況下連續輸入數字進行判斷?

印之 大概就是可以簡單地來個迴圈如之前有個人回答的那樣while 給個條件然後scanf輸入等 大概就這麼個意思後面也有高階點的吧但我忘了 賽象鼻 寫好了但是一輸入其他自符就會一直迴圈到崩潰煩惱 include int main int age 0 while age 886 printf 請輸入您...

沒有遺囑的情況下,我想繼承舅舅的房產可以嗎?需要什麼手續嗎?

zero lucifer 我看問題時間比較久,也有很多答主回答了,我補充一點,在一些特殊情況下還是有可能繼承舅舅遺產的 通過代位繼承 比如以下案例 1 舅舅A終身未婚,無子女,父母已經故去,有乙個哥哥C和妹妹D 2 妹妹多年前已經故去,但留有一子 B 此時,舅舅故去,沒有遺囑情況下開始按照法定繼承 ...

我父親有一間廠房,在沒有遺囑的情況下,繼承順序怎麼樣?

雷致英律師 如果廠房是你父母的共同財產,需要先析產。就是先做夫妻共同財產分割,分割後屬於你父親的那部分才是繼承範圍。法定繼承第一順位是配偶 子女 父母。第二順位是兄弟姐妹 祖父母 外祖父母。有第一順位繼承人時,第二順位繼承人不參與繼承。 北京冠領律師事務所 在沒有遺囑的情況下,按照法定繼承。繼承開始...