C++ c++;:如何仅将继承的方法绑定到父类?
我在为我的大学工作做多基地继承项目时偶然发现了这个问题。我的问题示例和代码本身:C++ c++;:如何仅将继承的方法绑定到父类?,c++,inheritance,C++,Inheritance,我在为我的大学工作做多基地继承项目时偶然发现了这个问题。我的问题示例和代码本身:我正在设置3个类,A、B和C。 B从A公开继承。 C从B公开继承。 我想在B中公开设置一个方法,该方法将指向a类对象的指针作为参数。但是,它应该只能使用a类对象,既不能使用B对象,也不能使用C对象。 问题是VisualStudio2013没有显示任何错误,只允许C类对象上的B类对象使用我的方法,这与我想要实现的正好相反为什么会发生这种情况? 这是否意味着继承会使C对象同时被解释为A、B和C类型?如果没有,是否有一种直
我正在设置3个类,A、B和C。
B从A公开继承。
C从B公开继承。
我想在B中公开设置一个方法,该方法将指向a类对象的指针作为参数。但是,它应该只能使用a类对象,既不能使用B对象,也不能使用C对象。
问题是VisualStudio2013没有显示任何错误,只允许C类对象上的B类对象使用我的方法,这与我想要实现的正好相反
为什么会发生这种情况?
这是否意味着继承会使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;
}`
A类
{
私人:
int x;
字符串z;
公众:
void SetZ()
{
cout>z;
}
字符串GetZ()
{
返回此->z;
}
};
B类
:公众A
{
公众:
无效使用单位基数(A*k)
{
cout如果B
公开继承自A
,则B*
可以隐式转换为A*
,因此可以使用B*
参数调用接受A*
的函数。为了防止这种情况,可以将继承设置为受保护的或私有的。但是,这可能会产生其他问题
为了防止意外传递B*
,您可以声明另一个采用B*
的重载并将其删除。此重载将赢得B*
和C*
参数,并导致编译错误。您还可以使用模板概括此方法,从而防止传递指向从派生的任何类的指针ode>A
,不命名所有此类类
void use_base(A* k) { /* do something */ }
void use_base(B*) = delete;
然而,这并不能阻止某人显式地将
B*
或C*
强制转换为a*
并调用a*
重载。“这是否意味着继承在某种程度上会使C对象被解释为类型a…”公共继承模型a是一种关系,因此是的,类C:public B
意味着:任何C
都是B
(正如任何B
都是a
一样,当需要a
时,也允许任何C
)。