C++初阶讲解—运算符重载汇总+实例(上)

本文介绍了C++中的运算符重载概念,包括选择作为成员或非成员函数的情况。详细讨论了赋值、算术、关系、输入/输出以及前置和后置递增运算符的重载,提供了实例解析每个运算符重载的用法和注意事项。
摘要由CSDN通过智能技术生成

目录

运算重载符

选择作为成员或非成员

赋值运算符重载

算术运算符(加号)重载

输出和输入运算符重载

前置++和后置++运算符重载


运算重载符

概念: 运算符重载是具有特殊函数名的函数,也具有其返回值类型,函数名字以及参数列表,其返回值类型与参数列表与普通的函数类似。

函数原型:

返回值 operator操作符(参数列表)

注意:

  • 运算符重载,就是对已有的运算符重新进行定义,赋予其另外一种功能,以适应不同的数据类型
  • 不能通过重载操作符来创建新的操作符,如operator@
  • 必须含有一个类类型或枚举类型的操作数
  • 不能改变内置类型的含义
  • 重载函数如果写成成员函数,左侧第一个参数隐含了一个Date* const this的形参,限定为第一个形参
  • 重载函数如果写成全局,那么左边是你输入的第一个参数,右边是第二个参数
  • .*,::,?:,sizeof,.这五个运算符不能重载

注意以下几点:

  • 除了赋值号(=)之外,基类中被重载的操作符都将被派生类继承
  • =,[],(),->操作符只能通过成员函数进行重载
  • << 和 >> 操作符最好通过友元进行重载
  • 不要重载&&和||运算符,因为无法实现短路规则

选择作为成员或非成员

当我们定义重载的运算符时,必须首先决定是将其声明为类的成员函数还是声明为一个普通的非成员函数。在某些时候我们别无选择,因为有的运算符必须作为成员;另一些情况下,运算符作为普通函数比作为成员更好。

下面的准则有利于我们在运算符定义为成员函数还是普通的非成员函数做出抉择:

  • 赋值(=)、下标([ ])、调用(())和成员访问箭头)(->),运算符必须是成员
  • 复合运算符一般来说是成员,但是非必须
  • 改变成员状态的运算符或者给定类型密切相关的运算符,比如递增、递减和解引用运算符,通常应该是成员
  • 具有对称性的运算符可能转换任意一端的运算对象,例如算术、相等性、关系和位运算符等,因此他们通常应该是普通的非成员对象

赋值运算符重载

我们可以重载赋值运算符,无论形参的类型是什么,赋值运算符都必须定义为成员函数

赋值运算符,赋值之后,左侧运算对象和右侧运算对象的值相等,并且运算应该返回它左侧运算对象的一个引用

特性:

  • 返回是*this
  • 如果没有显示定义,编译器也会生成一个,按字节序拷贝
Date& operator=(const Date& d)
{
	// 检测是否自己给自己赋值
	if (this == &d)
	{
		_year = d._year;
		_month = d._month;
		_day = d._day;
	}

	return *this;
}

实例:

#define _CRT_SECURE_NO_WARNINGS
#include<iostream> //引入头文件
#include<string>//C++中的字符串
using namespace std; //标准命名空间
class Maker
{
public:
	Maker()
	{
		id = 0;
		age = 0;
	}
	Maker(int id, int age)
	{
		this-&
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

m0_57781768

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值