上机实验7 运算符重载

上机实验7 运算符重载,第1张

上机实验7 运算符重载 实验目的

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

实验内容

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

多态性

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

运算符重载函数

系统已定义的运算符不适用于新的自定义数据类型,为了解决这一问题,C++允许运算符的重载。
运算符的重载是通过创建运算符重载函数来实现的;
运算符重载函数重载方法:
●类外定义普通函数
●类内定义成员函数
●友元函数

  1. 用类外定义运算符重载函数编写*
#include
using namespace std;
class complex {
public:
	double real;
	double imag;
	complex(double r = 0, double i = 0) {
		real = r;
		imag = i;
	}
	void print();
	void input(complex );
	
}; 
//类外定义
complex operator*(complex co1, complex co2) {
	complex temp;
	temp.real = co1.real * co2.real - co1.imag * co2.imag;
	temp.imag = co1.real * co2.imag + co1.imag * co2.real;
	return temp;
}
void complex:: print() {
	cout << "mcl real=" << real << " " << "mcl imag=" << imag << endl;
}
void complex::input(complex co1) {
	cout << "请输入实部";
	cin >> real;
	cout << "请输入虚部";
	cin >> imag;
}

类外定义运算符重载函数不属于任何类,只能访问类中的公有成员数据。

   2.用成员运算符重载函数编写*

#include
using namespace std;
class complex {
public:
	double real;
	double imag;
	complex(double r = 0, double i = 0) {
		real = r;
		imag = i;
	}
	void print();
	void input(complex );
    complex operator*(complex c);//类内成员函数
};
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;
}

成员运算符重载函数可以访问类内的私有成员或保护成员。

在成员运算符重载函数的形参表中:
➢如果运算符是单目的,则参数表为空;
➢如果运算符是双目的,则参数表中有一个 *** 作数。

对双目运算符而言,成员运算符重载函数的形参表中仅有一个参数,是运算符的右 *** 作数。另一个 *** 作数(左 *** 作数)是隐含的this指针,当前对象。

3.用友元运算符重载函数编写*

#include
using namespace std;
class complex {
public:
	double real;
	double imag;
	complex(double r = 0, double i = 0) {
		real = r;
		imag = i;
	}
	void print();
	void input(complex );
	friend complex operator*(complex co1, complex co2);
	//友元函数
};
complex operator*(complex co1, complex co2) {
	complex temp;
	temp.real = co1.real * co2.real - co1.imag * co2.imag;
	temp.imag = co1.real * co2.imag + co1.imag * co2.real;
	return temp;
}

友元运算符重载函数可以访问类内的私有成员或保护成员,但不属于类内。

运算符重载函数说明:

不能重载的运算符:
.  成员访问运算符
.* 成员访问指针运算符
? : 条件运算符
:: 作用域运算符
sizeof 长度运算符
C++只能对已有的C++运算符进行重载,不允许用户自定义新的运算符。
运算符重载是针对新类型数据的实际需要,对原有运算符进行适当的改造完成的。
运算符重载不改变 *** 作对象目数:
“+”为双目运算符,重载后依旧是双目运算符。
运算符重载不改变优先级。
运算符运算符重载函数的参数至少应有一个是类对象(或类的引用)。

程序执行结果如下:


 

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/5672213.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-12-16
下一篇2022-12-16

发表评论

登录后才能评论

评论列表(0条)

    保存