标签:pre end ble 名称 code 优先 space row 否则
运算符重载
1.方法
定义一个重载运算符的函数
(实质上是函数的重载。)
2.一般格式
函数类型operator运算符名称(形参列表){对运算符的重载处理}
3.运算符重载规则
(1)一般来说,不改变运算符原有含义。
(2)不能改变运算符的优先级别、结合性,也不能改变运算符需要的操作数的数目。
(3)有些运算符不能重载:“.”类成员运算符、“*”类指向运算符、sizeof运算符合、“::”类作用域分解运
算符、“?:”条件运算运算符。
(4)不能认为定义新的运算符。
4.运算符重载为类的成员函数
c1=c2+c3 <==> c1=c2.operator+(c3)
二元操作符的左操作数必须为该类对象,否则出错。
5.友元运算符重载
操作符的操作对象都必须通过重载函数的形参传入。
对于不要求左值且可以交换参数次序的运算符(如+、-、*、/等运算符),最好用非成员函数形式的重
载运算符函数实现。
6.运算符重载作为成员和友元函数重载注意
运算符=、()、[]、->可以作为类成员的运算符,但不可以作为友元运算符。
流插入“<<”和流提取运算符“>>”、类型转换运算符不能定义为类的成员函数,只能作为友元函数。
7.单目运算符的重载
<函数类型>operator++();//前缀运算
<函数类型>operator++(int);//后缀运算
8.重载流插入运算符和流提取运算符
ostream& operator <<(ostream& os,classType object){...os<<...;return os;}
istream& operator >>(istream& is,classType object){...is>>...;return is;}
这里第一个对象是流,因此不能作为成员函数。若是作为成员函数,第一个对象是*this。
Matrix类
1 #include<bits/stdc++.h> 2 using namespace std; 3 4 class Matrix{ 5 private: 6 int row; 7 int col; 8 double *data; 9 public: 10 Matrix(); 11 Matrix(int x,int y); 12 Matrix(const Matrix& t); 13 Matrix operator + (const Matrix& t); 14 Matrix operator - (const Matrix& t); 15 friend istream& operator >>(istream& in,Matrix& t); 16 friend ostream& operator <<(ostream& out,Matrix& t); 17 }; 18 19 Matrix::Matrix(){row=col=0;data=NULL;} 20 21 Matrix::Matrix(int x,int y){ 22 row=x; 23 col=y; 24 data=new double[x*y]; 25 } 26 27 Matrix::Matrix(const Matrix& t){ 28 row=t.row; 29 col=t.col; 30 data=new double[row*col]; 31 for(int i=0;i<row*col;i++) 32 data[i]=t.data[i]; 33 } 34 35 Matrix Matrix::operator + (const Matrix& t){ 36 if(row!=t.row||col!=t.col){ 37 throw 1; 38 } 39 Matrix tmp(row,col); 40 for(int i=0;i<row*col;i++) 41 tmp.data[i]=data[i]+t.data[i]; 42 return tmp; 43 } 44 45 Matrix Matrix::operator - (const Matrix& t){ 46 if(row!=t.row||col!=t.col){ 47 throw 1; 48 } 49 Matrix tmp(row,col); 50 for(int i=0;i<row*col;i++) 51 tmp.data[i]=data[i]-t.data[i]; 52 return tmp; 53 } 54 55 istream& operator >>(istream& in,Matrix& t){ 56 for(int i=0;i<t.row*t.col;i++) 57 in>>t.data[i]; 58 return in; 59 } 60 61 ostream& operator <<(ostream& out,Matrix& t){ 62 for(int i=0;i<t.row*t.col;i++){ 63 if((i+1)%t.col==0)out<<t.data[i]<<endl; 64 else out<<t.data[i]<<" "; 65 } 66 return out; 67 } 68 69 int main(){ 70 Matrix a(2,2); 71 cin>>a; 72 Matrix b(a); 73 b=a+a+a; 74 cout<<b; 75 }
标签:pre end ble 名称 code 优先 space row 否则
原文地址:https://www.cnblogs.com/huazibiankai/p/13185355.html