运算符重载

前言:之前的文章中提到过函数重载,今天来看看运算符重载

1.概念

1.运算符重载的定义:对已有的运算符赋予多重含义,使同一个运算符作用于不同类型的数据导致不同类型的行为。

2.实现过程中,首先把指定的运算表达式转化为对运算函数的调用,运算对象转化为运算符函数的实参,然后根据实参的类型来确定需要调用达标函数。 

3.和函数重载一样,运算符重载也存在一定规则:

(1)重载运算符不允许创造新的运算符。

        除以下几个以外,C++中的所有运算符都可以重载直接成员访问运算符(.)、成员指针运算符(*)、作用域解析运算符(::)、条件运算符(?:)和sizeof 运算符。

(2)运算符重载实质上是函数重载,因此编译程序对运算符重载的选择,遵循函数重载的选择原则。

(3)重载之后的运算符不能改变运算符的优先级和结合性,也不能改变运算符操作数的个数及语法结构。

(4)运算符重载不能改变运算符作用于内部类型对象的含义,它只能和用户自定义类型的对象一起使用,或者在用户自定义类型的对象和内部类型的对象混合使用时使用。

(5)运算符重载是针对新类型数据的实际需要,对原有运算符进行适当的改造。重载的功能应当与原有功能类似,避免没有目的地使用重载运算符。

(6)C++中的大多数运算符都可以通过成员或非成员函数进行重载,但是赋值运算符(=)、函数调用运算符(())、下标运算符([ ])和通过指针访问类成员的运算符(->)只能通过成员函数进行重载。

2.运算符重载的实现

1.两种实现方式:重载为类的成员函数和重载为类的友元函数。

(1)重载为类的成员函数。

函数类型 operator 运算符(形参表)
{
    函数体;
}

   (2)重载为类的友元函数。

friend 函数类型 operator 运算符(形参表)
{
    函数体;
}

注:函数类型就是运算结果类型;operator是定义运算符重载函数的关键字;运算符是重载的运算名称。

代码示例:自增运算符“++”的重载。

#include <iostream>
using namespace std;
/* run this program using the console pauser or add your own getch, system("pause") or input loop */

class Time
{
	public:
	Time()
	{minute=0;sec=0;}
	Time(int m,int s):minute(m),sec(s){}
	Time operator++ ();
	Time operator++ (int);
	void display(){cout<<minute<<":"<<sec<<endl;}
	private:
	int minute;
	int sec;
};
Time Time::operator++()         //定义前置自加运算符“++”重载函数 
{
	if(++sec>=60)
	{
		sec-=60;
		++minute;
	}
	return *this;               //返回自加后的对象 
}
Time Time::operator++(int)      //定义后置自家运算符“++”重载函数
{
	Time temp(*this);
	sec++;
	if(sec>=60)
	{
		sec-=60;
		++minute;
	}
	return temp;                   //返回的是自加前的对象 
 } 
 int main()
 {
 	Time time1(25,20),time2;
 	cout<<" time1: ";
 	time1.display();
 	++time1;
 	cout<<"++time1:";
 	time1.display();
 	time2=time1++;                //将自加前的对象的值赋给time2 
 	cout<<"time1++:";
 	time1.display();
 	cout<<"time2:";
 	time2.display();             //输出time2对象的值 
 }

运行结果:

 time1: 25:20
++time1:25:21
time1++:25:22
time2:25:21

未完待续。。。。。。

欢迎批评指正,更多C++知识请前往专栏。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

CJBHbc

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

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

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

打赏作者

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

抵扣说明:

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

余额充值