我有以下类声明:
class human
{
public:
void msg(){cout<<"I am human\n";}
};
class John:public human
{
public:
void msg(){cout<<"I am a John\n";}
};
很明显,课程John
和human
都有一个功能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}}。
答案 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();