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
)。