这个又啥用呢?这个用处可大啦,C语言沿袭过来的操作符是不能给自定义类型用的,可这些都是这些都是基础操作符,为了可以使用,就有了运算符重载
且这些重载得操作符的实现可以由你的想象实现没有任何限制

用法
- operator(关键字)+运算符+(原来运算符的操作个数)
 
下面都是写到类里,那么就可以少些一个左操作数,因为默认第一个是this
> < >= <=
这里会看到附用的价值
/>
bool Data::operator>(const Data&d1)
{
    if(_year>d1._year)
    {
        if(_month>d1._day)
        {
            if(_day>d1._day)
            {
                return true;
            }
        }
    }
    return false;
}
<
这里就是附用类上面的代码
bool Data::operator<(const Data&d1)
{
    return !(*this>d1);
}
# == !=
==
bool Date:: operator==(const Date&d1)
{
    if(_year==d1._year)
    {
        if(_month==d1._month)
        {
            if(_day==d1._day)
            {
                return true;
            }
        }
    }
    return  false;
}
附用
bool Date::operator!=(const Date&d1)
{
    return !(*this==d1);
}
前置/后置++ –
 这里有一个bug的操作的就是为重载前后置++为了区分就会在形参中加一个int,没加int的是前置,加int的就是后置,且这个是不开空间单纯就是表示
这个前置其实没啥难的,就直接加就好了
Date& Date::operator++()//前置
{
    _day++;
     return *this;
}
因为返回后置是先使用在++,所以需要一个零时的变量
Date Date::operator++(int day)//后置
{
    Date tmp(day);//拷贝构造
    ++(*this);
    return tmp;//拷贝构造
}
= (重点)
这里有体现类&用的价值类,我们就不需要去调用拷贝构造
 void operator=(const Date&d1)
    {
         if(*this!=&d1)//就是自己给自己复制俄罗斯套中套呀
         {
             _year=d1._year;
             _month=d1._month;
             _day=d1._day;
         }
    }
 这个就是类中默认成员函数之一(赋值重载),但是上面的代码其实是有一点点小瑕疵的,就是你写代码的时候可能会连续赋值

 当d1再去调用赋值重载的时候d1=void所以需要改成这样
   Date& operator=(const Date&d1)
    {
         if(*this!=d1)//就是自己给自己复制俄罗斯套中套呀
         {
             _year=d1._year;
             _month=d1._month;
             _day=d1._day;
         }
         return *this;
    }
这样就解决啦
<< >>(重点)
 这俩个运算符重载和其他的不太一样,他是写在类外面的,看下面的场景

 this指针是默认的第一个参数,那么如果写成内部就到导致上面的情况那咋办呢?
那就写在外面呗,可是如何访问里面的数据呢?
- 用接口访问
 - 友元
 
这里就采用友元比较方便少些点代码
/>>
 istream &operator>>(istream& in,Date d1 )
{
    in>>d1._year>>d1._month>>d1._day;
    return in;
}
<<
ostream &operator<<(ostream& out,Date d1 )
{
    out<<d1._year<<d1._month<<d1._day;
    return out;
}
 按照原来得逻辑来说他也是可以连续插入或者输出,所以他也和赋值重载一样,需要返回值
这里你有没有发现其实他重载之后,就是去调用那个对应重载,就像是函数一样,其实把他这样理解也可以的
 上面就写类一部分还有部分就留给你们啦
                  
                  
                  
                  
                            
本文详细介绍了C++中的运算符重载概念及其应用,包括比较运算符、增减运算符、赋值运算符及输入输出运算符的重载方法,并通过具体示例展示了如何在自定义类型中正确实现这些运算符。
          
      
          
                
                
                
                
              
                
                
                
                
                
              
                
                
              
            
                  
					9395
					
被折叠的  条评论
		 为什么被折叠?
		 
		 
		
    
  
    
  
            


            