C++运算符重载和const修饰的成员函数

目录

运算符重载的基本规则

前置++和后置++

取地址重载

const修饰的成员变量

C++推出了运算符重载,旨在使一般的运算符达到更便捷的效果。对于日期类,+、-、++、--已是家常便饭。今天,我们就来看看几个常见的又容易混淆的运算符重载,前置++后置++,以及取地址运算符重载。顺便提一嘴const修饰的成员函数

运算符重载的基本规则

首先运算符的运算对象的个数不能改变。对于一元的运算符来说,参数就只有一个。二元函数,多元函数也同理。不过值得注意的是,若该运算符在类类型里重载为类的成员函数,参数就会在原来的基础上减一(实际上没有减少),这是由于原本的第一个参数会被视为this指针,this指针在参数是不显示的,但在函数内部可以显示地使用。

其次,运算符重载是具有特名字的函数,由operator和后面要定义的运算符共同构成,与一般函数相同,也有返回值和参数列表以及函数体。

不能重载的运算符:(.*::sizeof?:.

前置++和后置++

operator++();

以上就是++运算符重载。可是前置++与后置++是由区别的,我们该如何命名区分这两个函数,函数内部又该如何实现呢。

首先是前置++,C++默认前置++的使用更加广泛,所以函数看起来更容易理解,请看代码:

	Pra& operator++()
	{
		a++;
		return *this;
	}

而对于后置++,为了区分两者的区别,形参多了一个int,operator++(int),调用函数时a.operator(1),填3,10只要是整型都可以,且后置要返回++之前的值,不返回引用而直接返回类类型。

	Pra operator++(int)
	{
		Pra d = *this;
		a++;
		return d;
	}

取地址重载

取地址重载又分为非const修饰的取地址重载和const修饰的取地址重载。

  1. const Pra* operator&() const
  2. {
  3. return this;
  4. }
  5. Pra* operator&()
  6. {
  7. return this;
  8. }

对于取地址重载,即使我们不实现,编译器也会帮助我们实现。有一点比较坑的是,虽然const修饰的取地址重载也可以调用非const类型(权限缩小),但编译器还是会自动生成一个非const的,所以非const就不再调用const修饰的取地址重载了。

const修饰的成员变量

既然讲了const修饰的成员变量,就不得不再提一嘴const修饰的成员变量了。使用const修饰的

成员变量,参数就不能被修改了,举个简单的样例:

使用const修饰的成员变量时就不用再后置+const,可以直接使用。

这种方式一般用来防止错误修改属性,一般不修改属性时都可以给函数后置+const.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值