博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
c++函数重载
阅读量:6348 次
发布时间:2019-06-22

本文共 1355 字,大约阅读时间需要 4 分钟。

  函数重载即2个函数名称相同但功能不同如:

int f(int a,int b)double f(double a,double b)int f(int a)

不可以只是返回类型不同如:

int f(int a,int b)double f(int a,int b)

下面定义一个基类:CBase,它的函数f声明位虚函数,它的继承类cderived分别重载函数f和g

#include
using namespace std;class CBase{ public: virtual void f(int x){ printf("case::f %d\n",x);//定义虚函数 f(关键字virtual) } void g(float x){ printf("case::g %f\n",x); }};class cderived:public CBase{//CBase的继承类cderived public: void f(int x){ printf("cderived::f %d\n",x);//重载函数f } void g(float x){ printf("cderived::g %f\n",x);//重载函数g }};int main(){ cderived derivedobj; derivedobj.f(3);//执行继承类的f函数 derivedobj.g(6.0f);//执行继承类的g函数 CBase* p=&derivedobj; p->f(3);//执行继承类的f函数 p->g(6.0f);//实际执行的是基类的g函数 return 0;}

打印结果为:

cderived::f   3cderived::g   6.000000cderived::f   3case::g  6.000000 可以看出来实际执行的是基类CBase的g函数

因为基类CBase的函数f为virtual虚函数,而继承类重载了函数,使其基类的f函数实际成为了继承类的f函数,利用转化为基类的对象p来调用f函数,仍然是继承类本身的函数;

所以如果允许继承类的重载函数修改基类的函数,就在基类中将其定义为virtual虚函数;

如果直接用基类的对象来调用

int main(){    CBase a;    cderived derivedobj;    derivedobj.f(3);    derivedobj.g(6.0f);    CBase* p=&a;    p->f(3);    p->g(6.0f);    return 0;}

其打印结果为:

cderived::f   3cderived::g   6.000000case::f  3case::g  6.000000

 

转载于:https://www.cnblogs.com/swustzww/p/8456368.html

你可能感兴趣的文章
Android Activity的4种启动模式
查看>>
leetcode第一刷_Minimum Depth of Binary Tree
查看>>
pydev-python 链接mysql数据库(mac系统)
查看>>
c++builder delphi 调用dll dll编写
查看>>
C++ 成员函数赋值给C 的函数指针的采坑录---可删除
查看>>
Java NIO中的读和写
查看>>
洛谷P1538迎春舞会之数字舞蹈
查看>>
【转】WebMagic-总体流程源码分析
查看>>
等宽字体
查看>>
SQL学习之高级联结(自联结、自然联结、外联接)
查看>>
MVC 之 <%%>相关内联代码块用法
查看>>
paip.配置ef_unified_filter() failed ext_filter_module mod_ext_filter.so apache 错误解决
查看>>
Quartz 2D编程指南(4) - 颜色和颜色空间
查看>>
你也许需要这样一个与代码作斗争的战场
查看>>
挺进亚洲杯八强 国足被意大利媒体当“自己人”
查看>>
春运首日粤水陆空运输平稳有序 智慧出行成趋势
查看>>
九岁男童几经“生死劫”获新生 新年写信感谢医生
查看>>
德首位跨性别议员连任后男变女 保守派议长力挺
查看>>
成为世界第三大运动品牌还不满足 安踏想要占领你的“心智”
查看>>
程序员写300行代码获1.5万月薪,网友:我可以敲到公司破产
查看>>