码迷,mamicode.com
首页 > 编程语言 > 详细

【C++】运算符重载

时间:2015-07-20 23:42:38      阅读:196      评论:0      收藏:0      [点我收藏+]

标签:c++   运算符重载   c      重载   

这是C++的特色,也是C++比较难的一个基本语法,但是,如果你把运算符重载看成一个特殊的类方法,且这个类方法的名称就是运算符,一切就变得简单了。

下面用一个简单的程序说明这个问题:

声明两个3x3二维矩阵a,b,其实就是Matrix类,里面就用私有的长度为9的一维数组存储数据。只是打印的时候,打成二维数组的样子

实现~a或者~b就能直接打印a与b,也就是~相当于把a,b打印出来,此乃单目运算符重载。

实现a+b,返回另一个相加之后的矩阵c。

也就是说做到如下图的效果:

技术分享

代码如下:

#include <iostream>
using namespace std;
class Matrix{
private:
	int matrix[9];//用一个长度为9的一维数组存储3x3的矩阵
public:
	Matrix(){//这里为Matrix类写两个不同参数的构造方法,主要是为了编程方便。
		for(int i=0;i<9;i++){
			this->matrix[i]=0;
		}
	}
	Matrix(int m11,int m12,int m13,int m21,int m22,int m23,int m31,int m32,int m33){//这个构造方法写得很明显了,传来9个数,分别赋予给矩阵的11位置,12位置……
		this->matrix[0]=m11;this->matrix[1]=m12;this->matrix[2]=m13;
		this->matrix[3]=m21;this->matrix[4]=m22;this->matrix[5]=m33;
		this->matrix[6]=m31;this->matrix[7]=m32;this->matrix[8]=m33;
	}
	void operator ~ (){//对单目运算符~的重载,这里严格要求,不能有形式参数。
		for(int i=0;i<9;i++){
			if(i%3==0){
				cout<<endl;
			}
			cout<<matrix[i]<<" ";//这里没有标明主人的matrix代表参与运算的Matrix类的私有成员matrix。不是我偷懒不写this->,是本来不能有this->。下同
		}
		cout<<endl;
	}
	Matrix operator + (Matrix &b){//对双目运算符+的重载,这里严格要求形式参数仅能为一个。代表运算符后面的Matrix类。
		Matrix c;
		for(int i=0;i<9;i++){
			c.matrix[i]=matrix[i]+b.matrix[i];//这里没有标明主人的matrix代表运算符前者的Matrix类的私有成员matrix
		}
		return c;
	}
};

int main(){
	Matrix a(1,2,3,4,5,6,7,8,9);
	Matrix b(9,8,7,6,5,4,3,2,1);
	cout<<"矩阵a如下:";
	~a;
	cout<<"矩阵b如下:";
	~b;
	cout<<"矩阵a、b相加之后如下:";
	~(a+b);
	return 0;
}

看完代码,运算符重载的作用很显然了,如果要声明一个类打印方法,按照各大面向对象的编程语言,基本上都要为这个类开一个void xx()的打印方法,然后这个xx的打印方法,就把类的私有成员this->aa,this->bb通通打印出来,在主函数调用的话,要a.xx()这样调用才能调用。

把~重载之后,可以直接对Matrix这个类进行打印。相当于在Matrix这个类中,声明一个叫~的打印方法,把原来C/C++中位取反的运算符重载了。

之后对+的重载,主要是两个Matrix类中私用成员进行运算。相当于在Matrix这个类中声明一个类似addMatrix(Matrix &b)的方法,里面实现this->matrix[i]与b.matrix[i]的相加,之后在主函数Matrix c=a.addMatrix(b)的意思了。

最后值得注意的一点:运算符重载仅能用于类里的私有成员之间的运算,不能用于C语言的标准类型直接的运行。比如,我想把^重载成两个int之间的幂运算,是绝对不可以的。这是C语言的规则,不为什么。运算符重载一开始就是用于自定义类直接的运算。

版权声明:本文为博主原创文章,未经博主允许不得转载。

【C++】运算符重载

标签:c++   运算符重载   c      重载   

原文地址:http://blog.csdn.net/yongh701/article/details/46972943

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!