【发布时间】:2015-12-03 23:38:09
【问题描述】:
我在为我的大学工作做多基继承项目时偶然发现了这个问题。我的问题示例和代码本身:
我正在设置 3 个类,A、B 和 C。
B 从 A 公开继承。
C 从 B 公开继承。
我想在 B 中公开设置一个方法,它确实将指向 A 类对象的指针作为参数。但是它应该只能使用 A 类对象,既不能使用 B 也不能使用 C。
问题是 Visual Studio 2013 没有显示任何错误,只是允许 B 类对象在 C 类对象上使用我的方法,这与我想要实现的完全相反。
为什么会这样?
这是否意味着继承在某种程度上会使 C 对象同时被解释为 A、B 和 C 类型?如果没有,是否有直接的方法来绑定仅用于它继承自的类的方法(A 和 B 对象上的 c 方法)?如果我在任何地方错了,请随时纠正我,我仍然是编程的新手。感谢您的帮助!
`
class A
{
private:
int x;
string z;
public:
void SetZ()
{
cout << "Set Z: ";
cin >> z;
}
string GetZ()
{
return this->z;
}
};
class B
:public A
{
public:
void use_base(A* k)
{
cout << "here and now, i'm using " << k->GetZ() << " however i, " << this->GetZ() << ", might want to!";
}
};
class C
:public B
{
void use_base(A* k)
{
cout << "extra";
}
};
int main()
{
A Bob;
B Mark;
Bob.SetZ();
Mark.SetZ();
C Karl;
Mark.use_base(&Karl); // doesn't show any error
return 0;
}`
【问题讨论】:
-
“这是否意味着在某种程度上继承会使 C 对象被解释为 A 类型...”公共继承模型是一个 is-a 关系,因此是的,
class C : public B意味着:任何C都是B(以及任何B是A,当需要A时也允许任何C)。
标签: c++ inheritance