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

c++运算符重载

时间:2020-06-24 00:30:28      阅读:92      评论:0      收藏:0      [点我收藏+]

标签: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 }

 

c++运算符重载

标签:pre   end   ble   名称   code   优先   space   row   否则   

原文地址:https://www.cnblogs.com/huazibiankai/p/13185355.html

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