计算机程序设计c++ 12-4:运算符重载

运算符重载

运算符重载指赋予运算符新的操作功能,主要用于对类的对象的操作

  • 运算符+意味着多少对象类型的加法呢?
  • 还可以定义新的对象类型加法

操作符重载,就是把已经定义的、有一定功能的操作符进行重新定义,来完成更为细致具体的运算等功能。

运算符重载定义形式
这里有关键字operator

<类型> <类名>::operator <操作符>(<参数表>)
{
	函数体
}

运算符重载举例(两个虚数的运算符重载)

  • 首先定义虚数类
    • 虚数可以描述为:a+bi
    • a与b看成实数,定义成double类型
  • 成员函数除了构造与析构外,还有:
    • 输出虚数、修改虚数、得到实部a、得到虚部b
    • 相加+、判相等==
    • 单目运算符(++i, i++)等

虚函数的定义

#include <iostream>

using namespace std;

class Complex
{
	private:
		double real, imag;
	public:
		Complex(double r=0, double i=0): real(r), imag(i){ }  // 构造函数
		double Real(){return real;}
		double Imag(){return imag;}
		Complex operator +(Complex&);  // 这里参数只有一个是直接与自己内部成员变量进行操作
		Complex operator +(double);
		bool operator ==(Complex);
		Complex operator ++();  // 前置运算符 ++i
		Complex operator ++(int);  // 后置运算符 i++ 用int参数来区分
		~Complex(){ };
} 

类外定义成员函数

Complex Complex::operator + (Complex &c)  // 重载运算符 +,两边是虚数对象
{
	Complex temp;
	temp.real = real + c.real;
	temp.imag = imag + c.imag;
	return temp;
}

Complex Complex::operator + (double d)  // 重载运算符+,左边是虚数对象,右边是双精度数
{

	Complex temp;
	temp.real = real+d;  // 只进行实部的相加
	temp.imag=imag;
	return temp;
}


bool Complex::operator ==(Complex c) // 重载运算符==
{
	if (real == c.real && imag == c.imag)
		return true;
	else
		return false;
}

Complex Complex::operator ++()
{
	real += 1;
	return *this;
}

Complex Complex:: operator ++(int)
{
	real += 1;
	return *this;
}

测试主函数

int main()
{
	Complex c1(3,4), c2(5,6), c3;
	cout << "C1 = " << c1.Real() << "+j" << c1.Imag() << endl;
	cout << "C2 = " << c2.Real() << "+j" << c2.Imag() << endl;
	
	c3 = c1 + c2;
	cout << "C3 = " << c3.Real() << "+j" << c3.Imag() << endl;
	
	c3 = c3+6.5;
	cout << "C3 + 6.5 = " << c3.Real() << "+j" << c3.Imag() << endl;
	if ( c1 == c2 )
		cout<<"两个复数相等";
	else
		cout<<"两个复数不相等";
	
	++c1;
	cout << "++C1 = " << c1.Real() << "+j" << c1.Imag() << endl;
	
	c2++;
	cout << "++C2 = " << c2.Real() << "+j" << c2.Imag() << endl;
	return 0;
}

在这里插入图片描述

总结

  • 运算符重载是多态的另一种表现形式,许多基本运算符都可以实现重载
  • 运算符重载的作用是免去了调用的麻烦
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

uncle_ll

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

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

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

打赏作者

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

抵扣说明:

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

余额充值