我在 C++ 多重继承方面遇到问题。这是我的代码,当我调用 display() 函数时,它给我的成员“display”请求不明确。但是M类的display()函数是私有(private)的。
#include<iostream>
#include<conio.h>
#include<stdio.h>
using namespace std;
class M
{
void display()
{
cout<<"Class M"<<endl;
}
};
class N
{
public:
void display()
{
cout<<"Class N"<<endl;
}
};
class P:public M,public N
{
};
int main()
{
P *ob = new P();
ob->display(); // Why its giving me ambiguity error? Since only one copy is there right!!
getch();
return 0;
}
谁能告诉我这个问题到底是为什么吗?
最佳答案
正如许多人已经提到的,重载解析不包括可见性(public
、private
和 protected
)。假设您只希望公共(public)版本在 P
中可见,则应在 P
的公共(public)接口(interface)中使用 using
声明:
class P: public M, public N
{
public:
using N::display;
};
恕我直言,这比必须在每次调用中提供范围(obj->N::display()
)要优雅得多。
关于C++ 多重继承不明确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31696067/