C ++具有相同名称的函数的继承

时间:2015-03-20 17:18:53

标签: c++

我有以下类声明:

class human
{
    public:
    void msg(){cout<<"I am human\n";}
};
class John:public human 
{
    public:
    void msg(){cout<<"I am a John\n";}
};

很明显,课程Johnhuman都有一个功能msg()。显然,课程John正在继承human的资源。现在,当我创建派生类的对象并调用msg()

John a;
a.msg();

输出结果为:

  

我是约翰

但不John从[{1}}继承msg()

还有一种方法可以通过使用派生类的对象来访问human msg()吗?

编辑:

Yup调用这样的函数会帮助我

human

另一个问题:

如果我像这样修改类:

a.human::msg()

现在我如何访问class human { protected: void msg(){cout<<"I am human\n";} }; class John:public human { public: void msg(){cout<<"I am a John\n";} }; 的{​​{1}}。

1 个答案:

答案 0 :(得分:4)

  

“但约翰没有从人类继承msg()吗?”

是的,但它隐藏了它自己的实现。

  

“还有办法访问人类的msg()吗?”

是的,您需要明确说明类范围(因为human::msg()在公共范围内,因为它最初被问到):

  John a;
  a.human::msg();
 // ^^^^^^^

如果您想要从班级human::msg()内访问John,则需要应用相同的语法:

class John : public human {
    public:
    void msg() {cout<<"I am a John\n";}
    void org_msg() { human::msg(); }
};

John a;
a.org_msg();

或其他替代

John john;
human* h = &john;
h->msg();