菜鸟的C++学习笔记:运算符的重载

运算符重载格式:

返回类型(空格)operator(要重载的运算符)(这里是个简单的括号)(里面放入形式参数)

理解:
运算符的重载,在本质上来讲是对特殊情况下的运算符进行一个重新定义
例子:

#include<iostream>
using namespace std;
class com{    //定义一个类,有实数和虚数
public:
    double real;
    double imag;
    com(double a,double b);
    com()
    {
        this->imag=0;
        this->real=0;
    }
    com operator+(com &test)
    {
        com now;
        now.real=this->real+test.real;
        now.imag=this->imag+test.imag;
        return now;
    }
};
com::com(double a,double b)
{
    this->imag=a;
    this->real=b;
}
int main()
{
    com a1;
    com a2(3,4);
    cout<<"a2:"<<a2.imag<<" "<<a2.real<<endl;
    com a3(5,6);
    cout<<"a3:"<<a3.imag<<" "<<a3.real<<endl;
    a1=a2+a3;
    cout<<a1.real<<" "<<a1.imag<<endl;
    return 0;
}

这一程序中运算符重载部分:

    com operator+(com &test)
    {
        com now;
        now.real=this->real+test.real;
        now.imag=this->imag+test.imag;
        return now;
    }

目的是让声明的com类可以相加,并为其定义相加的法则。
这里不仅仅可以重载‘+’,‘-’等运算符,‘[]’也是可以的
什么场面我没见过 ,这场面我真的头一次见
例子:

#include <iostream>
#define MAX 10
using namespace std;
class ARRY
{
   private:
      int a[MAX];
   public:
      ARRY(int x)//给数组赋值
      {
         int i;
         for(i=0;i<MAX;i++)
         {
           a[i]=x+i;
         }
      }
      int& operator[](int i)//因为返回的是数组的地址,因此要用int&
      {
          if(i>MAX)
          {
              return a[0];
          }
          return a[i];
      }
};
int main()
{
   ARRY A(2);
   cout<<A[2]<<endl;
   cout<<A[3]<<endl;
   cout<<A[100]<<endl;
   return 0;
}

注意:
1.参与运算符重载的至少有一个类。
2.大多数的运算符是可以重载的,但::(域运算符),.*(成员指针运算符),sizeof,?:(条件运算符)(在网上查了一下才知道名字,捂脸.jpg)不可以重载。
3.重载运算符不会改变运算符的优先级和其结合性。
4.重载函数可以定义在类内,当然也可以定义为一个友元函数。

以上是个人的学习笔记,有不对的地方欢迎各位大佬指正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值