标签: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 istream& operator >>(istream& is,classType object){...is>>...;return is;}
这里第一个对象是流,因此不能作为成员函数。若是作为成员函数,第一个对象是*this。
Matrix类
1 #include 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 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)
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)
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)
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)
57 in>>t.data[i];
58 return in;
59 }
60
61 ostream& operator out,Matrix& t){
62 for(int i=0;i){
63 if((i+1)%t.col==0)outendl;
64 else out" ";
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 coutb;
75 }
c++运算符重载
标签:pre end ble 名称 code 优先 space row 否则
原文地址:https://www.cnblogs.com/huazibiankai/p/13185355.html