c++学习笔记--操作符重载

一、操作符重载概念

(1)什么是重载

函数可以拥有相同的函数名, 参数列表(参数个数,参数类型)不同
通俗的讲:重载就是一个词有多种不同的含义。准确地说:在C++程序中,同一作用域内函数可以拥有相同的函数名,参数列表(参数个数,参数类型)不同

(2) 为什么要操作符重载

C++为了增强代码的可读性引入了运算符重载,运算符重载是具有特殊函数名的函数,也具有其返回值类型,函数名字以及参数列表,其返回值类型与参数列表与普通的函数类似。
运算符重载是为了解决类对象之间的运算的,通常的运算符只用于算术运算,如常量int之间,因为编译器已经定义了;而一个类两个对象之间成员进行运算必须重新定义,让编译器在遇到对象运算时能按我们要求的进行运算,这就是运算符重载的意义,即重定义运算符,因此你可以看到,运算符重载就是为类对象服务的,那么两个对象的成员进行运算那必须先获得对象本身啦,所以运算符重载参数必须含有类指针或引用,这是主要客户。

(3)重载的几种方式

(1)成员函数重载方式
(2)友元函数重载方式
(3)普通函数

大多数运算符既可以友元重载也可以成员重载,但是C++要求’=’、’[]’、’()’、’->'操作符必须被定义为类的成员操作符,把这些操作符通过全局函数进行重载时会出现编译错误

(4)操作符重载的限制:

重载后操作符的操作数至少有一个是用户定义类型;
不能违反原来操作数的语法规则;
不能创建新的操作符;
重载运算符的函数不能有默认的参数;
不能重载的操作符包括(以空格分隔):sizeof . .* :: ?: RTTI类型运算符
=、()、[]、以及 ->操作符只能被类的成员函数重载

二、operator关键字

函数名字为:关键字operator后面接需要重载的运算符符号。
函数原型:返回值类型 operator操作符(参数列表)
注意:
不能通过连接其他符号来创建新的操作符:比如operator@ 重载操作符必须有一个类类型或者枚举类型的操作数 用于内置类型的操作符,其含义不能改变,例如:内置的整型+,不能改变其含义 ,内置类型语言已经定义了其逻辑功能,不能对其做改变。运算符重载相当于在自定义类型中定义另一种逻辑。 作为类成员的重载函数时,其形参看起来比操作数数目少1个成员函数的操作符有一个默认的形参this,限定为第一个形参 注意以下的运算符不能重载

   作用域操作符:::
   条件操作符:?
   点操作符:.
   指向成员操作的指针操作符:->*  .*
   预处理符号:# , sizeof

. 和 .* 运算符不能重载是为了保证访问成员的功能不能被改变,域运算符和sizeof运算符的运算对象是类型而不是变量或一般表达式,不具备重载的特征。

三、操作符重载

(1)自增自减运算符重载

#include <iostream>
using namepace std;

class Complex
{
   
	int real;
	int img;
public:
	Complex():real(0),img(0){
   };
	Complex(int r,int i):real(r),img(i){
   };
	Complex addNunber(Complex &p1)
	{
   
		Complex p3
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值