首页 / C++ / 【C++】运算符重载
【C++】运算符重载
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了【C++】运算符重载,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1986字,纯文字阅读大概需要3分钟。
内容图文
![【C++】运算符重载](/upload/InfoBanner/zyjiaocheng/1192/22b3a726713649888c0e561df6dbb7c3.jpg)
这是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语言的规则,不为什么。运算符重载一开始就是用于自定义类直接的运算。
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文:http://blog.csdn.net/yongh701/article/details/46972943
内容总结
以上是互联网集市为您收集整理的【C++】运算符重载全部内容,希望文章能够帮你解决【C++】运算符重载所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。