C++函数重载问题

2025-04-21 21:21:30
推荐回答(2个)
回答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:

你这里函数名和返回值都一样,判断函数是否可以重载,你这个例子就看参数是否一样,参数不一样就可以重载撒