【发布时间】:2015-07-01 14:41:01
【问题描述】:
在我的 C++ 程序中,我有两个类(B1 和 B2),它们有自己的方法,但有 1 个(“意外”)是共同的。例如:
B1 类标题:
void height();
void size();
void enabled();
B2 类标题:
void width();
void length();
void enabled();
现在我有一个从 B1 和 B2 继承的 A 类。由于多重继承后我在方法enabled() 中存在“冲突”,我该如何避免这种情况?有没有办法从继承中排除方法?例如,我可以从 B1 类中排除 enabled() 继承(我不能将其设置为私有,因为它是从 B1 派生的其他类中使用的)。还有什么想法吗?
【问题讨论】:
-
1) 不要进行多重继承 2) 不要将方法命名为相同。当存在歧义时,IIRC 编译器也会向您发出警告。
-
@m0skit0: 但假设 A 类应该实现方法 height()、size()、width() 和 length()。如何避免多重继承?此外,不同的名称(例如 B1::enabled() 和 B2::isEnabled())可能会造成混淆。
-
您始终可以使用接口(虚拟方法)和组合而不是继承,就像 Java/C# 一样。
-
这就是不鼓励多重继承的原因,除了多重继承/实现“接口”(完全抽象类)。你几乎可以肯定地重新考虑这个问题。一种可能性是
A应该“包装”B1和B2的实例。问问自己——A“是”B1和A“是(也)”B2真的是真的吗??
标签: c++ inheritance multiple-inheritance