永发信息网

C++ 重载、隐藏、覆盖

答案:3  悬赏:10  手机版
解决时间 2021-03-20 02:12
#include
using namespace std;
class Base
{
public:
void fun() {cout<<"Base called!"<};
class Derived:public Base
{
public:
void fun() {cout<<"Derived called!"<};
int main()
{
Base bas,*p;
Derived der;
p = &bas;
p->fun(); //Base called!
p = &der;
p->fun(); //Derived called!
return 0;
}
输出结果分析?
最佳答案
由于fun()函数不是virtual,那么调用时只会根据指针的静态类型来确定调用哪个函数。
这里的p是Base*类型,那么就是说其静态类型是指向Base类型对象的指针。
所以都只会调用Base::func()函数。
只有当fun()函数是virtual时,才会根据指针的动态类型确定调用哪个函数。
全部回答
如果父类的Public函数不为虚,这样这个函数为静态绑定。用父类对象始终是指向父类的fun()函数。 如果在父类fun()前加上virtual关键字。 p = &der; p->fun(); //Derived called! 这两行语句可以调用子类的fun()。
其实你说的基类指针和派生类指针的问题,本质是virtual的影响。 对于标识为virtual的函数,其函数列表会被派生类更新,所以不管使用哪种调用方式都会是子类的方法。 对于非virtual的函数,其函数列表不会被更新,仅仅是添加了新的函数。在子类调用时,由于后添加的将原来的隐藏了,所以是调用子类的方法;而如果使用父类指针调用,由于在父类的函数列表中是没有子类的函数的,所以就变成了父类的函数。 至于重载,它是指相同的方法名称却有不同的调用参数(据说有的语言可以支持返回类型的重载)。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
I'm happy to meet you改为感叹句
QQ飞车什么头饰加经验?
河南建筑职业学院单招免笔试咋回事?
荷叶是啥颜色的
换了灯管还是不亮
情缘花店在什么地方啊,我要过去处理事情
钨极氩弧悍常采用什么引孤方式
为什么点击图标会出现正在准备再循环
海尔(Haier)BCD-225SNGA 225升节能 三门冰
民生哪种信用卡额度高
平果西出口(平果西互通出口西北向)在哪里啊,
荣事达洗衣机XQB45-831G能进水,能洗涤,就是
很想看与盗墓有关的日子3
为什么刹车只有后刹没有前刹
二战轴心国赢了的话德国意大利日本肯定会为了
推荐资讯
请问,怎样使手变得不再粗糙,
老百姓大药房滨河路店地址在什么地方,想过去
怎么对付班里的小霸王
有种涵养,隐喻内心.与人遇事,一笑了之,是
淮滨县信阳南大街510号零食多在什么地方啊,
私人办移动公厕,需要什么手续,需要去什么单
鼠辈怪盗漫画下载地址 你能看见说明你与我有
周公解梦死去的奶奶叫我买鸡给她吃
歌名是什么的,歌词是青菜心白菜心啊妹好良心
旁观者的姓名永远爬不到比赛的计分板上是谁说
明适应的举例阐述
我的世界带小地图版的
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?