zoukankan      html  css  js  c++  java
  • c++重载运算符注意

          c++重载运算符的时候加&或不加:

    如果加了&表示引用,说明用的都是同一块内存。如果不加,那么用的就是一份拷贝,即不同的内存。

    一般连续操作的时候要加&。

          可以重新定义一个对象,然后返回这个对象,这样就不会改变当前对象的值;也可以直接在当前对象

    上进行操作,返回*this,这样会改变当前对象的值。

    这个代码能说明我想说的。

    #include<iostream>
    #include<Windows.h>
    using namespace std;
    class Sample{
    private:
        int *p,len;
    public:
        Sample(){len=0;}
        Sample(int *a,int l);
        Sample(Sample &fp);
    
        Sample operator = (Sample);
        Sample operator + (Sample);
        bool operator == (Sample);
        Sample& operator ++ ();
        Sample operator ++ (int);
        ~Sample(){
            if(len)
                delete[] p;
        }
        void display()
        {
            for(int i=0;i<len;i++)
                cout<<p[i]<<" ";
            cout<<endl;
        }
    };
    Sample::Sample(int *a,int l)
    {
        int i;
        len=l;
        p=new int[l];
        for(i=0;i<len;i++)
            p[i]=a[i];
    }
    Sample::Sample(Sample &fp)
    {
        p=new int[fp.len];
        len=fp.len;
        for(int i=0;i<len;i++)
            p[i]=fp.p[i];
    }
    bool Sample::operator == (Sample t)
    {
        if(len==0&&t.len==0)
            return true;
        if(len!=t.len)
            return false;
        for(int i=0;i<len;i++)
        {
            if(p[i]!=t.p[i])
                return false;
        }
        return true;
    }
    Sample Sample::operator = (Sample t)
    {
        p=new int[t.len];
        len=t.len;
        for(int i=0;i<len;i++)
            p[i]=t.p[i];
        return *this;
    }
    Sample& Sample::operator ++ ()
    {
        for(int i=0;i<len;i++)
            p[i]++;
        return *this;
    }
    Sample Sample::operator ++ (int)
    {
        Sample old=*this;
        ++(*this);
        return old;
    }
    Sample Sample::operator + (Sample t)
    {
        int i;
        Sample fp;
        if(len>t.len)
        {
            fp.p=new int[len];
            fp.len=len;
            for(i=0;i<len;i++)
                fp.p[i]=p[i];
            for(i=0;i<t.len;i++)
                fp.p[i]+=t.p[i];
        }
        else 
        {
            fp.p=new int[t.len];
            fp.len=t.len;
            for(i=0;i<t.len;i++)
                fp.p[i]=t.p[i];
            for(i=0;i<len;i++)
                fp.p[i]+=p[i];
        }
        return fp;
    }
    int main()
    {
        int a[15],b[15],c[15],i;
        int lena,lenb,lenc;
    
        cout<<"输入a[]的长度: ";cin>>lena;
        cout<<"输入a[]:  ";
        for(i=0;i<lena;i++)
            cin>>a[i];
        cout<<"输入b[]的长度: ";cin>>lenb;
        cout<<"输入b[]:  ";
        for(i=0;i<lenb;i++)
            cin>>b[i];
        cout<<"输入c[]的长度: ";cin>>lenc;
        cout<<"输入b[]:  ";
        for(i=0;i<lenc;i++)
            cin>>c[i];
    
        Sample t1(a,lena),t2(b,lenb),t3(c,lenc),t4,t5;
        cout<<"t1: ";t1.display();
        cout<<"t2: ";t2.display();
        cout<<"t3: ";t3.display();
    
        cout<<endl;
    
        if(t1==t2)
            cout<<"t1==t2 is true"<<endl;
        else cout<<"t1==t2 is false"<<endl;
    
        cout<<"t4=t2: ";
        t4=t2;
        t4.display();
    
        cout<<"t5=t2+t3: ";
        t5=t2+t3;
        t5.display();
    
        cout<<"t1++ : ";
        t1++;
        t1.display();
    
        cout<<"++t1 : ";
        ++t1;
        t1.display();
        system("pause");
    }
    /*
    5 1 2 3 4 5 4 1 2 3 4 3 1 2 3
    */
  • 相关阅读:
    hive与hbase整合
    待重写
    hive DML
    【知识强化】第六章 总线 6.1 总线概述
    【知识强化】第五章 中央处理器 5.1 CPU的功能和基本结构
    【知识强化】第四章 指令系统 4.3 CISC和RISC的基本概念
    【知识强化】第四章 指令系统 4.2 指令寻址方式
    【知识强化】第四章 指令系统 4.1 指令格式
    【知识强化】第三章 存储系统 3.6 高速缓冲存储器
    【知识强化】第三章 存储系统 3.5 双口RAM和多模块存储器
  • 原文地址:https://www.cnblogs.com/sweat123/p/4944063.html
Copyright © 2011-2022 走看看