永发信息网

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

答案:5  悬赏:0  手机版
解决时间 2021-01-03 20:19
#include<iostream>
using namespace std;

class base
{
public:
virtual void func()
{
cout<<"reach base::func()\n"<<endl;
}

virtual void func(int a)
{
cout<<"reach base::func("<<a<<")"<<endl;
}
};
class derive:public base
{
public:
virtual void func()
{
cout<<"reach derived::func()"<<endl;

}

};

int main()
{
derive d;
d.func(1);

return 0;
}

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

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

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

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

void main()
{
derive d;
d.func(1);
}
全部回答
b.func(4.5);没问题吧,b的对象调用b的函数,有一个参数为int的一个参数为double的,淡然是调用double的。 a.func(4.5);通过a的引用来调用,当然只能调用a具有的函数。这里a只有一个函数void a::func(int i),所以本来应该只能调用这个,但是它是一个虚函数,在b中重写了,而且a实际上所引用的是一个b的对象。所以,调用的就不是void a::func(int i)而变成b中重写的版本void b::func(int i)。
你在derive类中的func也加上了virtual导致基类函数被覆盖,所以肯定错了
在派生类重新定义或者覆写基类的重载函数,会导致继承的名称被遮掩。 在派生类的 public 区域增加 using base::func; 语句可以解决。
虚函数的限制 如果声明了某个成员函数为虚函数,则在该类中不能出现和这个成员函数同名并且返回值、参数个数、类型都相同的非虚函数。在以该类为基类的派生类中,也不能出现这种同名函数。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
虹景苑居委会在什么地方啊,我要处理点事
二环路桥地址在什么地方,想过去办事
如果真的爱一个人 无论他走多远
联通,如何取消流量包
顺丰优选的酒都是行货的吗
在对某二次三项式进行因式分解时,甲同学因看
如果这是生活 歌词
源梦苑居委会办公地址在什么地方?我要处理点
7788收藏网的钱怎么转到自己银行卡上
含羞草有哪些特点
单选题晴朗的天空呈现蔚蓝色,是因为A.波长较
姓张后面带贺字的名字起名
阅读下面一段文字,完成小题。(8分)站立着,
魁怎么读拼音
2010年4月14日青海省玉树县发生7.1级强烈地震
推荐资讯
suunto颂拓腕上电脑在杭州哪里有专卖店?
单选题绿色消费的核心是A.节约资源B.保护环境
天阶夜色凉如水的意思
分布于塔里木盆地的绿洲,其灌溉水源主要来自
下列实验操作中,不符合操作规范的是A.给试管
下列词语中的字,读音全都正确的一组是A.倾轧
为什么我的笔记本电脑用不了WLAN?
一个长方体,正好横截成两个棱长是6厘米的正
不规则形状的房屋平面图(多边形)如何标注尺寸
摧垮的意思
为什么同一个系统,在不同电脑装系统,占用c盘
北大奖学金公示多少钱
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?