关于c++中虚函数重载的问题

2025-02-24 08:29:43
推荐回答(5个)
回答1:

大家都说错了,没说到重点。
这不是什么虚函数限制,主要原因在于函数调用名称解释的问题。按照名称解析规则,func在类derive中已经找到,所以后续的按参数匹配的名称查找会在该类中进行。
这也可以说是一个C++的值得商讨的地方吧,不过更多的,这可以做一个好的特性来使用,因为它避免了一些有争议的名称解析。
你可以这样指明调用关系:d.base::func(1);

derive类中的func关没有覆盖基类的虚函数。
思考如下的函数关系,你就会明白我说的争议的名称解析是什么意思了。如果名称查找继续发生在基类,后面的函数会引发二义性。
class base

{
public:
virtual void func(long a)
{
cout<<"reach base::func("< }

void func(double c)
{
cout<<"reach base::func("< }
};
class derive:public base
{
public:
virtual void func(long a)
{
cout<<"reach derive::func("< }
};

void main()
{
derive d;
d.func(1);
}

回答2:

在派生类重新定义或者覆写基类的重载函数,会导致继承的名称被遮掩。

在派生类的 public 区域增加 using base::func; 语句可以解决。

回答3:

你在derive类中的func也加上了virtual导致基类函数被覆盖,所以肯定错了

回答4:

虚函数的问题!!

回答5:

虚函数的限制
如果声明了某个成员函数为虚函数,则在该类中不能出现和这个成员函数同名并且返回值、参数个数、类型都相同的非虚函数。在以该类为基类的派生类中,也不能出现这种同名函数。