C ++具有简单的多重继承,许多语言设计都将其视为危险。但是某些语言(例如Ruby和PHP)使用奇怪的语法来完成相同的操作,并将其称为mixin或traits。我多次听说,mixin /特性比普通的多重继承更难滥用。
是什么使它们危险性降低了?是否有不能用mixins / traits来实现,但是可以用C ++风格的多重继承来实现?他们有可能遇到钻石问题吗?
似乎我们在使用多重继承,但只是借口说它们是混合/特性,因此我们可以使用它们。
7
期待有人对此发布一个写得好,周到和彻底的答案。
—
罗伯特·哈维
Ruby和PHP没有引入mixin和特性。Mixins是在Flavors(1980)中引入的,Traits是在Squeak Smalltalk(2001)中引入的。Flavors是最早的具有多重继承的面向对象语言,它使用了mixins。C ++仅在2.0版本中获得了多重继承,该版本于1989年发布,比Flavors落后9年。因此,问题应该是:Flavors具有简单的mixin,但是某些语言(例如C ++)引入了奇怪的语法来完成相同的事情,并将其称为多重继承。
—
约尔格W¯¯米塔格