目标
把握运算符重载的应用办法
内容
编程题
1.(1)以成员函数的形式,实现运算符“+”的重载,程序运行后果放弃不变; (2)以友元函数的形式,实现运算符“+”的重载,程序运行后果放弃不变。
代码:
(1)
#include<iostream.h>class Box{public: Box(){} Box(int l,int b, int h) { length=l; breadth=b; height=h; } Box operator+(Box& b) { Box box; box.length=length+b.length; box.breadth=breadth+b.breadth; box.height=height+b.height; return box; } void print() { cout<<"length:"<<length<<endl; cout<<"breadth:"<<breadth<<endl; cout<<"height:"<<height<<endl; }private: double length; double breadth; double height;};int main(){Box Box1(1,2,3);Box Box2(4,5,6);Box Box3;Box3=Box1+Box2;Box3.print();return 0;}
后果:
(2)
#include<iostream.h>class Box{public: Box(){} Box(int l,int b, int h) { length=l; breadth=b; height=h; } friend Box operator+(Box& b,Box& b1); void print() { cout<<"length:"<<length<<endl; cout<<"breadth:"<<breadth<<endl; cout<<"height:"<<height<<endl; }private: double length; double breadth; double height;}; Box operator+(Box& b,Box& b1) { Box box; box.length=b1.length+b.length; box.breadth=b1.breadth+b.breadth; box.height=b1.height+b.height; return box; }int main(){Box Box1(1,2,3);Box Box2(4,5,6);Box Box3;Box3=Box1+Box2;Box3.print();return 0;}
后果:
2.把握以类的成员函数重载运算符的应用办法
代码:
#include<iostream.h>class Time{private: int hour; int minute;public: Time(){hour=0; minute=0;} Time (int h,int m); Time operator+(Time &t2); void display();};Time::Time(int h,int m){hour=h;minute=m;}Time Time::operator +(Time &t2){Time t;t.hour=hour+t2.hour;t.minute=minute+t2.minute;if(t.minute>=60){t.minute-=60;t.hour++; }return t;}void Time::display(){cout<<hour<<"小时"<<minute<<"分钟"<<endl;}int main(){Time t1(3,30),t2(2,40);Time t;t=t1+t2;cout<<"t1+t2=";t.display();return 0;}
3.把握以非成员函数重载运算符的应用办法
代码:
#include<iomanip>#include<iostream.h>class Matrix{private:int mat[2][3];public:Matrix();friend Matrix operator+(Matrix &a,Matrix &b);void input();void display();};Matrix::Matrix() { for(int i=0;i<2;i++) for(int j=0;j<3;j++) mat[i][j]=0; }Matrix operator+(Matrix &a,Matrix &b){Matrix c;for(int i=0;i<2;i++) for(int j=0;j<3;j++) c.mat[i][j]=a.mat[i][j]+b.mat[i][j]; return c;}void Matrix::input(){for(int i=0;i<2;i++) for(int j=0;j<3;j++) cin>>mat[i][j];}void Matrix::display(){for(int i=0;i<2;i++){for(int j=0;j<3;j++)cout<<mat[i][j]<<" ";cout<<endl;}}int main(){Matrix a,b,c;cout<<"input a:\n";a.input();cout<<"input b:\n";b.input();c=a+b;cout<<"output c:\n";c.display();return 0;}
后果:
4.定义一个Point类,蕴含公有的数据成员x,y,按要求实现上面的编程
(1)重载运算符“<<”和“>>”,用于输入输出Point类的对象。
(2)重载运算符“++”和“–”,实现对Point类对象的自增和自减运算(x和y同时加1或减1),要求同时重载前缀和后缀的模式。
(3)重载运算符“+”和“-”,实现两个点坐标的相加与相减。
代码:
#include<iomanip>#include<iostream.h>class point{private:int x,y;public:friend ostream & operator<<(ostream&,point&);friend istream & operator>>(istream&,point&);point operator++(){x++;y++;return *this;}point operator++(int){x++;y++;return *this;}point operator--(){x--;y--;return *this;}point operator--(int){x--;y--;return *this;}friend point operator+(point &,point &);friend point operator-(point &,point &);};ostream & operator<<(ostream &out,point &a){ out<<"x坐标为:"<<a.x<<" y坐标为:"<<a.y<<endl; return out;}istream & operator>>(istream &in,point &b){ in>>b.x; in>>b.y; return in;}point operator+(point &b,point &b1){point bb;bb.x=b1.x+b.x;bb.y=b1.y+b.y;return bb;}point operator-(point &b,point &b1){point bb;bb.x=b.x-b1.x;bb.y=b.y-b1.y;return bb;}void getint(int &f){cin>>f;int a;a=f;}int main(){point a,b,f,z;int c,d,e;cout<<"请输出两个类对象的x和y坐标:"<<endl;cout<<"请输出第一个的x和y坐标:"<<endl;cin>>a;cout<<a;cout<<"请输出第二个的x和y坐标:"<<endl;cin>>b;cout<<b;cout<<"请抉择:1、两个坐标点自增或自减 2、两个坐标点相加或相减"<<endl;getint(c);if(c==1){cout<<"1:自增,2:自减"<<endl;getint(d);if(d==1){++a;b++;cout<<"自增后x和y坐标为:"<<endl;cout<<a;cout<<b;}else {--a;b--;cout<<"自减后x和y坐标为:"<<endl;cout<<a;cout<<b;}}else{cout<<"1:相加 2:相减"<<endl;getint(e);if(e==1){f=a+b;cout<<"相加为:"<<endl;cout<<f;}else{z=a-b;cout<<"相减为:"<<endl;cout<<z;}}return 0;}
后果:
自增:
自减:
相加:
相减:
文章图片起源:网络游戏