IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 运算符重载 -> 正文阅读

[C++知识库]运算符重载

一、实验目的

1.掌握C+ +语言多态性的基本概念
2.掌握运算符重载函数的声明和定义方法

二、实验内容
多态性:
在面向对象方法中,所谓多态性就是不同对象收到相同的消息时,产生不同的行为。在C++ 程序设计中,多态性是指用一个名字定义不同的函数,这些函数执行不同但又类似的操作,这样就可以用同一个函数名调用不同内容的函数。

运算符重载:
系统已定义的运算符不适用于新的自定义数据类型,为了解决这一问题,C++允许运算符的重载。算符重载是通过创建运算符重载函数来实现的。
运算符重载格式:
函数类型 operator 运算符名称(形参表)
{
对运算符的重载处理
}

实验要用到三种运算符重载函数:
1.在类外定义的运算符重载函数
2.友元运算符重载函数
3.成员运算符重载函数

1.在类外定义的运算符重载函数
代码如下:

#include<iostream>
using namespace std;
class Complex {
public:
	double real;
	double imag;
	Complex(double r = 0, double i = 0)
	{
		real = r;
		imag = i;
	}
};
Complex operator+ (Complex co1, Complex co2)
{
	Complex temp;
	temp.real = co1.real + co2.real;
	temp.imag = co1.imag + co2.imag;
	return temp;

}

int main(void)
{
	Complex com1(1.1, 2.2), com2(3.3, 4.4), total1, total2;
	total1 = operator+(com1, com2);
	cout << "real1=" << total1.real << " " << "imag1=" << total1.imag << endl;
	total2 = com1 + com2;
	cout << "real2=" << total2.real << " " << "imag2=" << total2.imag << endl;
	return 0;
}

运行结果:在这里插入图片描述
2.友元运算符重载函数

定义友元运算符重载函数的语法形式:
(1 ) 在类的内部,定义友元运算符重载函数的格式如下:
friend 函数类型 operator 运算符(形参表 )
{
函数体
}
(2) 友元运算符重载函数也可以在类中声明友元函数的原型,在类外定义。
在类中,声明友元运算符重载函数原型的格式如下:
class X{
friend 函数类型 operator 运算符(形参表);
};
在类外,定义友元运算符重载函数的格式如下:
函数类型 operator 运算符(形参表 )
{
函数体
}

#include<iostream>
using namespace std;
class Complex {
public:
	double real;
	double imag;
	Complex(double r = 0, double i = 0)
	{
		real = r;
		imag = i;
	}
	void print();
	friend Complex operator+(Complex co1, Complex co2);
};
Complex operator+ (Complex co1, Complex co2)
{
	Complex temp;
	temp.real = co1.real + co2.real;
	temp.imag = co1.imag + co2.imag;
	return temp;

}
void Complex::print()
{
	cout << "total real=" << real << " " << "total imag=" << imag << endl;
}
int main(void)
{
	Complex com1(1.1, 2.2), com2(3.3, 4.4), total1;
	total1 = com1 + com2;
	total1.print();
	return 0;
}

运行结果:在这里插入图片描述
3.成员运算符重载函数

定义成员运算符重载函数的语法形式
(1) 在类的内部,定义成员运算符重载函数的格式如下:
函数类型 operator 运算符(形参表)
{
函数体
}
(2) 成员运算符重载函数也可以在类中声明成员函数的原型,在类外定义。
在类的内部,声明成员运算符重载函数原型的格式如下:
class X {
函数类型 operator 运算符(形参表);
}
在类外,定义成员运算符重载函数的格式如下:
函数类型 X::operator 运算符(形参表 )
{
函数体
}

#include<iostream>
using namespace std;
class Complex {
public:
	double real;
	double imag;
	Complex(double r = 0.0, double i = 0.0);

	void print();
    Complex operator+(Complex c);
};
Complex::Complex(double r, double i)
{
	real = r;
	imag = i;
}
Complex Complex::operator+ (Complex c)
{
	Complex temp;
	temp.real = real + c.real;
	temp.imag = imag + c.imag;
	return temp;

}
void Complex::print()
{
	cout << "total real=" << real << " " << "total imag=" << imag << endl;
}
int main()
{
	Complex com1(2.3, 4.6), com2(3.6, 2.8), total1;
	total1 = com1 + com2;
	total1.print();
	return 0;
}

运行结果:在这里插入图片描述

4.编写一个程序,实现复数的乘法。

采用双目成员运算符重载函数来完成。对于双目运算符,成员运算符重载函数的形参表中仅有一个参数,它作为运算符的右
操作数。另一个操作数(左操作数)是隐含的,是该类的当前对象,它是通过 this 指针隐含
地传递给函数的。如下:
class X {
int operator+ (X a);
};

#include<iostream>
using namespace std;
class Complex {
public:
	Complex(double r = 0.0, double i = 0.0);
	void print();
	Complex operator* (Complex c);
private:
	double real;
	double imag;
};
Complex::Complex(double r, double i) 
	{ real = r;
     imag = i; 
}

Complex Complex::operator* (Complex c)
{
	Complex temp;
	temp.real = real * c.real - imag * c.imag;
	temp.imag = real * c.imag + imag * c.real;
	return temp;
}
			void Complex::print() 
			{ 
				cout<< real;
			if (imag > 0) 
				cout << "+ ";
			if (imag != 0)
				cout << imag << 'i' << endl;
			}
				int main()
			{
				Complex com1(1.2, 2.5), com2(3.6, 4.7), total;
				total = com1 * com2;
				total.print();
				return 0;
			}

运行结果:
在这里插入图片描述
三、实验总结
1.C++ 为运算符重载提供了一种方法,即在进行运算符重载时,必须定义一个运算符重载函数,其名字为 operator,后随一个要重载的运算符。
2.在编译时遇到名为 operator@的运算符重载函数,就检查传递给函数的参数的类型。如果编译器在一个运算符的两边 “看” 到自定义的数据类型,就执行用户自己定义的函数,而不是系统已经定义好的运算符函数。
3.C++只能对已有的C++运算符进行重载,不允许用户自定义新的运算符。运算符重载是针对新类型数据的实际需要,对原有运算符进行适当的改造完成的。

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-12-15 18:05:37  更:2021-12-15 18:07:31 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 13:07:17-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码