运算符的重载

运算符的重载

一.运算符重载为成员函数

对于双目运算符B,如果要重载为类的成员函数,使之实现表达式oprd1 B oprd2.经过重载后该表达式相当于函数调用oprda.operator B(oprd2)。

重载形式和实际调用形式

#include<iostream>
using namespace std;
class Complex {
public:
	Complex(int x = 0, int y = 0) :real(x), imag(y) {}
	Complex operator+(Complex&b);//运算符重载为成员函数
	void show() {
		cout << real << "," << imag << endl;
	}
private:
	int imag, real;
};
Complex Complex::operator+(Complex&b) {
	return Complex(real + b.real, imag + b.imag);
}
int main() {
	Complex a(1, 2), b(3, 4), c;
	c = a + b;         //运算符重载形式
	//c = a.operator+(b);//实际调用形式
	c.show();
	return 0;
}

运行效果:
重载形式
8.1.png
实际调用形式
8.2.png

二.运算符重载为非成员函数

对于双目运算符B,如果要实现oprd1Boprd2,函数形参为oprd1,oprd2,表达式oprd1+oprd2相当于调用函数operator B(oprd1,oprd2).

重载形式和实际调用形式

#include<iostream>
using namespace std;
class Complex{
public:
	Complex(int x=0,int y=0):real(x),imag(y){}
	friend Complex operator+(Complex&a,Complex&b);//运算符重载为非成员函数
	void show() {
		cout <<real<<","<<imag<<endl;
	}
private:
	int imag,real;
};
Complex operator+(Complex&a,Complex&b) {
	return Complex(a.real+b.real,a.imag+b.imag);
}
int main() {
	Complex a(1, 2), b(3, 4),c;
	//c = a + b;         //运算符重载形式
	c=operator+(a, b);//实际调用形式
	c.show();
	return 0;
}

运行效果:
重载形式
8.3.png
实际调用形式
8.4.png

posted @ 2019-10-27 20:40  tao4867  阅读(214)  评论(0编辑  收藏  举报