gpt4 book ai didi

C++继承同名函数

转载 作者:行者123 更新时间:2023-11-30 01:49:25 24 4
gpt4 key购买 nike

我有以下类声明:

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();

输出是:

I am John

但是 John 不是从 human 继承了 msg() 吗?

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

编辑:

是的,像这样调用函数会对我有帮助

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";}
};

现在如何访问 humanmsg()

最佳答案

"But doesnt John inherit msg() from human?"

是的,它确实存在,但是用它自己的实现隐藏了它。

"Also is there a way to access msg() of human?"

是的,您需要明确声明类范围(只要 human::msg() 像最初要求的那样在公共(public)范围内):

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

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

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();

关于C++继承同名函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29172315/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com