如何避免继承冲突
How to avoid conflict in inheritance
在我的 C++ 程序中,我有两个 classes(B1 和 B2)有自己的方法,但有 1 个("accidentally")是相同的。例如:
class B1 header:
void height();
void size();
void enabled();
class B2 header:
void width();
void length();
void enabled();
现在我有一个继承自 B1 和 B2 的 class A。由于我在多重继承后在方法 enabled()
中有一个 "conflict",我该如何避免这种情况?有没有办法从继承中排除方法?例如,我可以从 class B1 中排除 enabled()
继承(我不能将其设置为私有,因为它被从 B1 派生的其他 classes 使用)。还有其他想法吗?
您可以尝试使用命名空间。使 B1::enabled()
成为名为 X
和 B2::enabled()
- Y
的命名空间的成员。在导出的 class 中使用 X::enabled()
或 Y::enabled()
.
您可以使用语法 Class::function
消除对基本 class 方法的调用的歧义。在你的情况下,无论你在哪里使用 enabled
,限定调用:
B1::enabled();
B2::enabled();
如果你只需要其中一个函数,你可以写一个using-declaration:
using B1::enabled;
你可以解决歧义,但无论如何你都会继承这两个功能。您没有办法选择不继承某些功能。要解决歧义,请使用以下内容:
class B1
{
public:
void height();
void size();
void enabled();
};
class B2
{
public:
void width();
void length();
void enabled();
};
class A: public B1, public B2
{
public:
using B2::enabled;
};
就我个人而言,我会将 B 封装在 A 中,并为它在 A 中提供的任何您在 A 之外需要的有用的东西提供一个接口,而不是继承。如果你需要多态行为,让 A 和 B 都继承自同一个抽象接口。
在我的 C++ 程序中,我有两个 classes(B1 和 B2)有自己的方法,但有 1 个("accidentally")是相同的。例如:
class B1 header:
void height();
void size();
void enabled();
class B2 header:
void width();
void length();
void enabled();
现在我有一个继承自 B1 和 B2 的 class A。由于我在多重继承后在方法 enabled()
中有一个 "conflict",我该如何避免这种情况?有没有办法从继承中排除方法?例如,我可以从 class B1 中排除 enabled()
继承(我不能将其设置为私有,因为它被从 B1 派生的其他 classes 使用)。还有其他想法吗?
您可以尝试使用命名空间。使 B1::enabled()
成为名为 X
和 B2::enabled()
- Y
的命名空间的成员。在导出的 class 中使用 X::enabled()
或 Y::enabled()
.
您可以使用语法 Class::function
消除对基本 class 方法的调用的歧义。在你的情况下,无论你在哪里使用 enabled
,限定调用:
B1::enabled();
B2::enabled();
如果你只需要其中一个函数,你可以写一个using-declaration:
using B1::enabled;
你可以解决歧义,但无论如何你都会继承这两个功能。您没有办法选择不继承某些功能。要解决歧义,请使用以下内容:
class B1
{
public:
void height();
void size();
void enabled();
};
class B2
{
public:
void width();
void length();
void enabled();
};
class A: public B1, public B2
{
public:
using B2::enabled;
};
就我个人而言,我会将 B 封装在 A 中,并为它在 A 中提供的任何您在 A 之外需要的有用的东西提供一个接口,而不是继承。如果你需要多态行为,让 A 和 B 都继承自同一个抽象接口。