函数重载与运算符重载

一.函数重载

1.什么是函数重载?

函数重载指的是在同一个作用域下,一组函数的函数名相同,但是形参列表(类型、顺序、个数)不同,这样的函数就构成了函数重载。

注意:函数返回值类型和函数重载无关

函数重载示例:


//构成函数重载
int add(int a, int b)
{
	return a + b;
}

int add(int a, int b,int c)
{
	return a + b + c;
}

float add(float a, int b)
{
	return a + b;
}

float add(int a, float b)
{
	return a + b;
}

//下面两个函数不构成函数重载
//返回值类型不是函数重载的决定因素
float add(int a, float b)
{
	return a + b;
}

double add(int a, float b)
{
	return a + b;
}

2.c语言不支持函数重载的原因

c语言进行函数修饰时只用到了函数名的信息,函数名相同修饰之后也是一样的名字,对于同名函数编译器没办法区分,会认为函数重定义,所以不支持函数重载。

3.C++函数重载的底层原理

对于同名函数,C++根据函数名和参数列表对函数名进行修饰,修饰之后同名的函数编译器也能进行区分。
例如:
g++的函数修饰规则是
_Z+函数名字符个数+函数名+形参列表类型首字母

因此,同名函数如果只有返回值类型不相同,修饰之后编译器还是没办法区分,会认为函数重定义。

二.运算符重载

运算符重载可以认为是函数重载的一种特殊形式

1.运算符重载的作用

让自定义类型可以和基础类型一样进行多种形式的运算,让内置类型的运算符支持自定义类型的运算,为编程带来便捷

2.运算符重载的格式

返回值类型 operator+运算符(参数列表)
{}

示例:

Date& operator+=(const Date& date)
{
	//-------
	return *this;
}

3.运算符重载的特点

(1) 只能重载已有的运算符,不能创造新的运算符;
(2) 内置类型的运算逻辑不能修改,也就是说不能改变已有的运算符的基本功能,比如将+改为-;
(3) 作为类成员的运算符重载函数,参数比正常函数少一个,第一个参数为隐含的this指针;

示例:
在这里插入图片描述

(4) 运算符重载函数的完整形式:
对象1. + operator + 运算符 + 对象2
简写形式:对象1+运算符+对象2(可读性高)
示例:

完整形式:d1.operator==(d2)
简写形式:d1==d2

在这里插入图片描述

(5) 如果要进行连续赋值,返回值类型不能为空,返回值类型必须是当前类型的引用

关于此处知识点我犯的错误:
在这里插入图片描述
d4是一个新创建的对象,不能使用赋值操作,赋值操作是对一个已经存在的对象进行的,上面代码的最后一行语句实际上调用的是拷贝构造。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值