实验报告四 —— 运算符重载

定义一个Time类,重载一元“++”和二元“+”操作符,使之具有时间相加的功能。

重载函数定义在不同区域需要注意是否传入参数

一元操作符定义在类里面是不用传入的

而二元除了必要的用来比较的那个参数需要传入,不需要再传入两个数据

也就是你拿原本的成员来和你传入的那个成员进行比较

#include<iostream>
using namespace std;

class Time{
  
  private:
    int minutes;
    int hours;
    
  public:
    Time(){
      minutes=0;
      hours=0;
    }
  
  void display(){
    cout<<hours<<"时"<<minutes<<"分"<<endl;
  } 
  
  void input(){
    cout<<"请输入时间(时 分)"<<endl;
    cin>>hours;
    cin>>minutes;
  } 
  
  Time operator++(){
    
    ++minutes;
    if(minutes>=60){
      ++hours;
      minutes-=60;
    }
    
    return *this;
    
  }
  
  Time operator+(const Time& T2){
    
    hours = this->hours + T2.hours;
    minutes = this->minutes + T2.minutes;
    
    if(hours>=24){
      hours -=24;
    }
    
    if(minutes>=60){
      minutes -=60;
    }
    
    return *this;
  }
}; 

int main(){
  
  Time a;
  Time b;
  Time c;
  a.input();
  b.input();
  
  ++a;
  a.display();
  
  c=a+b;
  c.display();
  
  return 0;
  
}

定义一个Rectangle类,要求重载运算符“>” “<” 使之实现比较两个矩形对象面积的大小。

关系运算符的重载需要用到布尔类型

当关系成立的时候返回true,关系不成立的时候返回false

之后便可以直接对类成员进行比较

而无需再引用到具体的内部成员

#include<iostream>
using namespace std;

class Rectangle{
  
  private:
    int length;
    int width;
    int area;
    
  public:
    Rectangle(){
      length=0;
      width=0;
      area=0;
    }
    
  void input(){
    cout<<"请输入矩形的长和宽(长 宽)"<<endl; 
    cin>>length;
    cin>>width; 
  }
  
  void count(){
    area=length*width;
  }
  
  bool operator <(const Rectangle& a){
    
    if(area < a.area){
      return true;
    }else if(area >= a.area){
      return false;
    }
  }
  
  bool operator >(const Rectangle& b){
    
    if(area > b.area){
      return true;
    }else if(area <= b.area){
      return false;
    }
  }	
  
};

int main(){
  
  Rectangle alpha;
  Rectangle beta;
  
  alpha.input();
  beta.input();
  
  alpha.count();
  beta.count();
  
  if(alpha>beta){
    cout<<"alpha比beta面积大"<<endl; 
  }else if(alpha<beta){
    cout<<"alpha比beta面积小"<<endl;
  }
  
  return 0;
  
}

 

发表评论

您的电子邮箱地址不会被公开。