【运算符重载小记】

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

提示:这里可以添加本文要记录的大概内容:

记性不太好,学过就忘记.
所以做好笔记很重要.


提示:以下是本篇文章正文内容,下面案例可供参考

一.对重载的理解

C++的函数重载很重要.
将符号带入到函数名的重载函数也就是运算符重载.
运算符重载本质是拥有特殊函数名的函数

if(d1== d2) 等价于 d1.operate==(d2);

二.函数结构

[返回值类型] [关键字operate] [操作符] [参数列表]

T operate+(T d1,T d2){return {d1.a+d2.a , d1.b+d2.b};}

三.注意

1.作为类成员的重载函数时.其形参默认有一个是this.不填就是1个参数.填1个就是2个参数

*this解引用后就是参数的具体数值了.

2.操作符必须是已有的.不能自己创造.例如@就不是操作符所以不能重载.

3.这五个运算符不支持重载 .* :: sizeof ?: .

4.负号和减号重载的区别.检查参数.只有1个参数那就是负数.如果有两个参数就是减号

5.后++的声明中多一个形参.不需要实参

创建一个同类对象作为副本返回值.且返回类型不能是引用.因为局部变量的引用是没用的…应该直接返回对象.
自增后返回对象副本.直接返回自增对象就成前++了

6.赋值运算符必须是类内成员(=等号)

返回值必须是this对象的引用
和拷贝构造是有区别的
赋值运算符:不创建新对象.是对已有对象的赋值
拷贝构造:会创建一个新的对象.例如对象初始化,参数的非引用传递

MyInt &operator=(int i){
	a=i;
	return 	*this;
}

7.类型转换符

1.必须是成员函数.
2.没有返回值类型
3.形参表为空

class MyInt {
	int a=5;
public:
	operator int(){
		return a;
	}
}

int main(){
	MyInt m;
	int n =m;//这里是不是也等价于 int n = int(m); 此时int对应重载的函数名
}

8.[]下标符号重载

只能在类内声明,且只有一个参数(默认有一个this)

class MyInt {
	int a[]={1,2,3,4};
public:
	int& operator[](int index){
		return a[index];//这里返回的是数组的引用,所以可以给返回值再赋值
	}
}

9.()重载函数调用符

class MyInt {
	int a = 5;
public:
	bool operator()(int x){
		return x>5;//参数大于成员变量返回真,否则返回假
	}
}

int main(){
	MyInt a;
	a(10);//返回真
	a(3);//返回假
}

调用lambda表达式相当于直接调用它的operator()函数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值