重载、重写、

本文探讨了C++中的函数重载和重写,强调了函数的唯一性标识在于函数参数而不是返回值。重载允许同名函数有不同的参数列表,而重写则涉及到虚函数,并要求在父类中是virtual的,且返回值、函数名和参数列表完全一致。特别地,const成员函数与非const成员函数虽然名字相同,但它们属于两个不同的阵营,可以构成重载,因为它们针对的是不同类型的对象。const对象只能调用const函数,非const对象则优先使用非const函数,这种设计有其特定的用途。
摘要由CSDN通过智能技术生成

重载与重写

考虑这个问题前,先思考下: 什么是函数重载。
一个函数的声明,由:返回值 + 函数名 + 参数列表,3部分决定。

重载,肯定函数名是相同的。 (当然,在C语言里,是不允许有同名函数的。但在C++里是允许的)
返回值,无限制!! 只要函数参数不冲突,返回值相同与否都可以

这一点,完全不需要去死记!!! 你可以从逻辑上思考一下。
假如有:int func(); 和 void func(),我们直接去调用:func()
这显然是有歧义的,因为函数的返回值 可以不接收。

即,当函数参数相同时,int func(int, double); 和 T func(int, double); 不管你的T是什么,都是错误的!!!
因为,一个函数的唯一性标识,就是:函数名 + 参数列表

故,函数重载,是针对的“函数参数(类型、个数)”的不同。

即所有的函数重载:

  • 函数名都相同
  • 返回值 随意(只要: 函数参数不同即可)
  • 函数参数不同。

即,只要一个编译正确的程序。 他里面,所有的同名函数,都叫做: 重载!!!
这些同名的函数,他们的函数列表 一定都是不同的。(返回值随意。)


在规则上: 函数重写,其实和重载,是完全不一样的。
但在标识上,两者需要同时考虑(把virtual去掉,当成普通函数!)

函数重写:

  • 该函数,在Fa父类里,必须是virtual虚函数
  • (函数返回值 + 函数名 + 参数列表),必须完全一致!!
class FA{
   
	void f();
	void f(int);
	// FA里的f函数,只要满足函数重载即可!!  不能有`int f()`
}
class SON : public FA{
   
	int f();
	int f(int);
	// SON里的f函数,和FA里的。没有任何关系!!! 
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值