簡體   English   中英

Ada 中的多類型繼承

[英]Multiple Type Inheritance in Ada

假設我有以下內容:

type blah is abstract tagged 
record 
element1 : integer; 
end record;

type blah2 is abstract tagged
record
element2 : integer;
end record;

我希望我可以做這樣的事情:

type blah3 is abstract new blah1 and blah 2 with null record;

所以理論上我現在可以訪問 blah3.element1 和 blah3.element2

這可能嗎? 和任何提示或技巧?

更新:

是否可以使用指針引用 blah3(包含 blah 和 blah2)的元素?

IE(這只是一個粗略的想法代碼很糟糕......大聲笑)

type blah3 is new type with
record
element1 : ptr to blah.element1;
element2 : ptr to blah2.element2;
end record

然后例如可以通過 blah3.element1 訪問?

Marc C 是對的(像往常一樣)。

即使在支持它的語言中,直接多重繼承也非常有爭議。 在某些邊緣情況下編譯器應該做什么存在很大的問題,例如當兩個父類定義相同方法或成員的不同版本時。 它明確地不是在Ada95中時,允許他們增加了繼承。

所以你的下一個問題將是“那么我該怎么做我想做的事?”

這取決於您試圖通過使用多重繼承來實現什么。 在最壞(最復雜)的情況下,您通常可以通過“mixin”繼承實現您正在尋找的效果。 以前做過,但我仍然認為它在這篇 AdaIC 文章中得到了最好的解釋: Ada95 和多重繼承,而不是我自己做的。

這是一個摘要:

Ada 95 支持多繼承模塊包含(通過多個“with”/“use”子句),通過私有擴展和記錄組合的多繼承“is-implemented-using”,以及通過使用泛型的多繼承混合、正式包和訪問判別器。

似乎 Ada 2005 有另一種更簡單的方法來做到這一點(“接口”),但我還沒有機會嘗試。 您可以在此處閱讀有關它的更多信息(包括為什么直接 MI 在 Ada 中仍然被認為是不好的)。 我找到了這個例子。 同樣,這僅在您的編譯器支持 Ada 2005 時才有效

Interfaces can be composed from other interfaces thus 
type Int2 is interface;
...
type Int3 is interface and Int1;
...
type Int4 is interface and Int1 and Int2;
...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM