关于名称隐藏、重写和虚拟表的编译错误 我玩C++规则。我犯了一个错误,但我无法解释。请帮助解释发生编译错误的原因。顺便说一句,我对解决这个问题不感兴趣。谢谢
Q1为什么名称隐藏在案例中不起作用?例如,如果我们删除lineA的关键字virtual.com,编译将正常工作 Q2在案例2中添加了一个函数后,编译将完成 请帮助解释Q1和Q2 #包括 案例2:关于名称隐藏、重写和虚拟表的编译错误 我玩C++规则。我犯了一个错误,但我无法解释。请帮助解释发生编译错误的原因。顺便说一句,我对解决这个问题不感兴趣。谢谢,c++,overriding,overloading,vtable,name-hiding,C++,Overriding,Overloading,Vtable,Name Hiding,Q1为什么名称隐藏在案例中不起作用?例如,如果我们删除lineA的关键字virtual.com,编译将正常工作 Q2在案例2中添加了一个函数后,编译将完成 请帮助解释Q1和Q2 #包括 案例2: #include <iostream> using namespace std; class base { public: virtual int func() { cout << "vfunc in base class\n"
#include <iostream>
using namespace std;
class base
{
public:
virtual int func()
{
cout << "vfunc in base class\n";
return 0;
}
// new added
virtual double func(int)
{
return 0.0;
}
};
class derived: public base
{
public:
double func(int)
{
cout << "vfunc in derived class\n";
return 0;
}
};
int main()
{
return 0;
} ^
#包括
使用名称空间std;
阶级基础
{
公众:
虚int func()
{
cout重写函数时,无论何时调用原始实现,新实现都必须是可调用的。此处的base
函数返回int
。这意味着任何调用方都需要int
错误发生是因为您的重写函数返回了<代码>双<代码>,而不是<代码> int <代码> .< /p> 编译错误说明您已经为函数()定义了不同的返回类型。您可能认为这应该是由C++重载来处理的,但是重载只能在输入参数上进行,而不是返回值。
例如:
class base
{
public:
virtual int func(int param)
{
cout << "vfunc in base class\n";
return 0;
}
};
class derived: public base
{
public:
double func(double param)
{
cout << "vfunc in derived class\n";
return 0;
}
};
类基
{
公众:
虚拟整数函数(整数参数)
{
cout似乎是不言自明的;double func()
与int func()
冲突。但是如果删除虚拟函数,编译就可以工作。是的。因为虚拟函数不同。我知道它不同。你能解释导致此错误的原因吗?为什么你认为你编写的应该工作?
#include <iostream>
using namespace std;
class base
{
public:
virtual int func()
{
cout << "vfunc in base class\n";
return 0;
}
// new added
virtual double func(int)
{
return 0.0;
}
};
class derived: public base
{
public:
double func(int)
{
cout << "vfunc in derived class\n";
return 0;
}
};
int main()
{
return 0;
} ^
class base
{
public:
virtual int func(int param)
{
cout << "vfunc in base class\n";
return 0;
}
};
class derived: public base
{
public:
double func(double param)
{
cout << "vfunc in derived class\n";
return 0;
}
};