C 在不進行繼承的情況下,能否實現多型功能?

時間 2021-10-23 18:55:16

1樓:

使用std::variant可以方便的實現執行期呼叫多個不同類物件的相同介面,無需繼承同乙個抽象類(只需已知所有可能出現的類名,編譯時使用c++17標準),不知是否滿足需求

快速示例如下

#include

#include

// std::variant std::visit#include

using

namespace

std;

class

Avoid

print

()};

class

Bvoid

print

()void

call

()};

class

Cvoid

print

()};

typedef

variant

Printable

;int

main

()//呼叫列表每個元素的print()介面for(

auto

&var

:list),

var);

}//呼叫B類元素獨有的call()方法,其他元素跳過for(

auto

&var

:list)}}}

2樓:

有幾種方法實,直接的虛繼承是乙個辦法,還可以才有非虛介面實現模板方式實現,也就是介面使用非虛函式,實現才有虛繼承的方式供介面呼叫。還有一種辦法是採用函式指標,也就是用乙個介面,介面通過函式指標呼叫實現的函式。

模板雖然也可以實現多型,但對你不太合適吧。

我這是參考effective c++,條款35

3樓:馮東

建立乙個介面 (pure virtual class),把 class A 中可以需要多型的部分放到新介面中,讓 class A class B, C 都 inherit/implement 新介面。

雖然我不喜歡輕易的繼承,不過提問的問題應該是個比較簡單的情況。稍作處理就行。

4樓:San Cheung

功能分離好,外部業務呼叫淺封裝,不要糾結什麼多型不多型,

實現功能第一,低耦合好維護第二,什麼什麼第三,... 總之拿某個語言特性來套具體任務排最後。

如何在不進行手術的情況下讓胃變小?

deng 那必須是漸進式的節食和卷腹運動,什麼是漸進式的節食就是在一定時間內 比如說半個月 把飯量由以前的三餐加至三餐以上,但是量在乙個月以內要實現減半,再加上捲腹運動,絕對可以實現 你要知道誰都貪吃,不光是你,那別人都做到了擁有了好身材,你為什麼不可以?只能靠自律,你不自律,談什麼都白搭 別人也餓...

人類能否在儲存自身的情況下消滅地球上的所有肉眼可見生物?

銅鼎金盾 先槓一下。人類也是生物,消滅所有生物還要儲存人類自身,這是矛盾,是不可能實現的。所以改成 所有其它 就沒這個槓了。所有 這是追求絕對,是不可能的事情。讓自己失明 這個答案嚇到我了,這代價其實最大。本著差不多就行,問題實現還是可以的。能看見的坐地打死,冷凍備吃。看不見的不用管,等看見在說。眼...

企業在實收資本為0的情況下,能否向股東借款,計入其他應付款?這樣操作是否合法,是否存在資本弱化的可能?

tigerwzh 可以。但出資是章程確定的股東義務,如果將來經營虧損,公司無能力償債,股東出資未到位的,債權人可以起訴股東在未出資範圍內承擔連帶償還責任。所以,這樣操作對股東而言,不見得是好事。 Mr.Zheng 資本弱化的目的是產生利息的稅盾效應,如果是無息借款就不構成資本弱化的條件。中國對資本弱...