运算符的重载--练习

加减乘除符号重载(友元)

# include <iostream>
using namespace std;
class num {
private:
	double real;
	double imag;
public:
	num();
	void set();
	void display();
	//乘号重载
	friend num operator *(const num& a, const num& b);
	friend num operator +(const num& a, const num& b);
	friend num operator -(const num& a, const num& b);
	friend num operator /(const num& a, const num& b);
};
num::num() {
	real = 0;
	imag = 0;
}
void num::set() {
	cin >> real >> imag;
}
void num::display() {
	cout << real << "+" << imag << 'i' << endl;
}
num operator*(const num& a, const num& b) {
	num num1;
	num1.real = (b.real * a.real) - (b.imag * a.imag);
	num1.imag = (b.imag * a.real) + (b.real * a.imag);
	return num1;
}
num operator+(const num& a, const num& b) {
	num num1;
	num1.real = a.real + b.real;
	num1.imag = a.imag + b.imag;
	return num1;
}
num operator-(const num& a, const num& b) {
	num num1;
	num1.real = a.real - b.real;
	num1.imag = a.imag - b.imag;
	return num1;
}
num operator/(const num& a, const num& b) {
	num num1,temp;
	temp.real = b.real;
	temp.imag = -b.imag;
	num1 = temp * a;
	double x = (a.real * a.real) + (b.real * b.real);
	num1.real = num1.real / x;
	
	return num1;
}
int main() {
	num a1, a2;
	a1.set();
	a2.set();
	num a3 = a1 * a2;//等价于:a3 = operator*(a1,a2)
	num a4 = a1 + a2;
	num a5 = a1 - a2;
	num a6 = a1 / a2;
	a3.display();
	a4.display();
	a5.display();
	a6.display();
}

使用普通函数进行加号的重载

# include <iostream>
using namespace std;
class num {
private:
	
public :
	double real;
	double f;
	num();
	void display();
	void set();
};
num  operator +(const num&a,const num&b) {
	num z;
	z.real = a.real + b.real;
	z.f = a.f + b.f;
	return z;
}
num::num() {
	real = 0;
	f = 0;
}
void num::set() {
	cin >> real >> f;
}
void num::display() {
	cout << real << '+' << f << "i" <<endl;
}
int main() {
	num a1, a2;
	a1.set();
	a2.set();
	num a3 = a1 + a2;
	a3.display();
}

使的 i+c1 c1+i 以及c1+c2 合法:

# include <iostream>
using namespace std;
class complex {
private:
	double real;
	double imag;
public :
	complex();
	void set();
	void display();
	complex operator+ (const complex & x);//复数之间的现加
	complex operator+(int a);//(整数在后)
	friend complex operator+(int a, const complex& z);//整数和复数相加(整数在前 )
};
complex::complex() {
	real = 0;
	imag = 0;
}
void complex::set() {
	cin >> real >> imag;
}
void complex::display() {
	cout << '(' << real << '+' << imag << 'i' << ')' << endl;
}
complex complex::operator+(const complex& a) {
	complex z;
	z.real = real + a.real;
	z.imag = imag + a.imag;
	cout << z.real << '!' << endl;
	cout << z.imag << "!!" << endl;
	cout << "two" << endl;
	return z;
}
complex complex::operator+(int a) {
	complex z;
	z.real = real + a;
	z.imag = imag;
	cout << "hou" << endl;
	return z;
}
complex operator+(int x,const complex& a) {
	complex z;
	z.real = x + a.real;
	z.imag = a.imag;
	cout << "qian" << endl;
	return z;
}
int main() {
	complex num, num1;
	num.set();
	num1 = 3 + num;//报错,此处不可以用引用作为函数的参数只能用正常的int类型
	num1.display();
	num1 = num + 3;//此处如上一致,都不可以让变量的引用作为参数。
	num1.display();
	complex num2;
	num2.set();
	num1 = num2 + num;
	num1.display();
	
}

重载加号,使得其表达的意思为两个矩阵相加:

# include <iostream>
using namespace std;
class co {
private:
	int num[4][3];
public:
	co();
	void set();
	void display();
	co operator+(const co &x);

};
co::co() {
	for (int i = 0;i < 2;i++) {
		for (int j = 0;j < 3;j++) {
			num[i][j] = 0;
		}
	}
}
void co::set() {
	for (int i = 0;i < 2;i++) {
		for (int j = 0;j < 3;j++) {
			cin >> num[i][j];
		}
	}
}
void co::display() {
	for (int i = 0;i < 2;i++) {
		for (int j = 0;j < 3;j++) {
			if (j == 0) {
				cout << num[i][j];
			}
			else
			cout <<' '<< num[i][j];
		}
		cout << endl;
	}
}
co co::operator+(const co& z) {
	co z1;
	for (int i = 0;i < 2;i++) {
		for (int j = 0;j < 3;j++) {
			z1.num[i][j] = num[i][j] + z.num[i][j];
		}
	}
	return z1;
}
int main() {
	co num1, num2;
	num1.set();
	num2.set();
	co num3;
	num3 = num1 + num2;
	num3.display();
	return 0;
}

在上一个代码的基础上,重载<<以及>>运算符,进行两个矩阵的相加

# include <iostream>
using namespace std;
class co {
private:
	int num[4][3];
public:
	co();
	void set();
	void display();
	co operator+(const co &x);
	//输入
	friend istream& operator >>(istream&,co&);
	//输出
	friend ostream & operator << (ostream&,co&);//两种编译方式都可通过

};
istream& operator>>(istream& input, co& z) {
	for (int i = 0;i < 2;i++) {
		for (int j = 0;j < 3;j++) {
			input >> z.num[i][j];
		}
	}
	return input;
}
ostream& operator<<(ostream& output, co& z) {
	for (int i = 0;i < 2;i++) {
		for (int j = 0;j < 3;j++) {
			if (j == 0) {
				output << z.num[i][j];
			}
			else
				output << ' ' << z.num[i][j];
		}
		output << endl;
	}
	return output;
}
co::co() {
	for (int i = 0;i < 2;i++) {
		for (int j = 0;j < 3;j++) {
			num[i][j] = 0;
		}
	}
}
void co::set() {
	for (int i = 0;i < 2;i++) {
		for (int j = 0;j < 3;j++) {
			cin >> num[i][j];
		}
	}
}
void co::display() {
	for (int i = 0;i < 2;i++) {
		for (int j = 0;j < 3;j++) {
			if (j == 0) {
				cout << num[i][j];
			}
			else
			cout <<' '<< num[i][j];
		}
		cout << endl;
	}
}
co co::operator+(const co& z) {
	co z1;
	for (int i = 0;i < 2;i++) {
		for (int j = 0;j < 3;j++) {
			z1.num[i][j] = num[i][j] + z.num[i][j];
		}
	}
	return z1;
}
int main() {
	co num1, num2;
	//num1.set();
	//num2.set();
	cin >> num1 >> num2;
	co num3;
	num3 = num1 + num2;
	//num3.display();
	cout << num3;
	return 0;
}

题目:
处理一个复数和一个double数据相加的运算,结果存放到double类型变量d中,输出d,再以复数形式输出此值。

# include <iostream>
using namespace std;
class complex {
private:
	double real;
	double f = 0;
public:
	complex(double r, double i) {
		real = r;
		f = i;
	}
	//对象转换为double类型
	operator double() {
		return real;
	}
	complex(double z) {
		real = z;
		f = 0;
	}
	void display() {
		cout << real << '+' << f << 'i' << endl;
	}
};
int main() {
	complex x1(2, 1);
	double d = x1 + 2.3;
	cout << d << endl;
	 complex(d).display(); 
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值