c++ 学习 7

运算符重载

  • 根据reciver的对象的类型决定调用哪个运算符重载函数。对于reciver对象不做类型转换。
class Integer
{
private:
    int i;

public:
    Integer(int i=0):i(i){};
    void print(){
        cout<<i<<endl;
    }
    const Integer operator+ (const Integer &that) const
    {
      
        return Integer(i + that.i);
    };
};
int main()
{

    Integer i=10;
    Integer a=i+1000;   // 1000--Interger(int)--->Integer
    a.print();

    return 0;
}
Integer x(10),y(200);
Interger z=x+y;
Interger z=x+3; //3--->Interger(int)-->Interger(3)
Interger z=3+y; //ERROR
  • 全局成员变量 友元函数
class Integer
{
private:
    int i;

public:
    Integer(int i=0):i(i){};
    void print(){
        cout<<i<<endl;
    }
    const Integer operator+ (const Integer &that) const
    {
      
        return Integer(i + that.i);
    };
     friend Integer operator+(const Integer &l,const Integer &r){
        return Integer(l.i+r.i);

     }
};

int main()
{

    Integer i=10;
    Integer a=1000+i;   // 1000--Interger(int)--->Integer
    a.print();
    return 0;
}
Integer x=3+7; //10--->Integer(int)---->Integer(10)
  • 技巧: (1) 单目运算符做成员函数 (2)= ,(), ->, ->* 必须是成员函数 (3)赋值应该是成员函数 (4) 其他的双目运算符非成员函数。

运算符重载-----原型

class Vector
{
private:
    int * m_array;
    int m_size;
public:
    Vector(int size):m_size(size){m_array=new int[size];};
    ~Vector(){ delete m_array;};


    int& operator [] (int index){
        return m_array[index];
    }
};

运算符重载-------赋值

class Fi{

    public:
    Fi(){};


};
class Fee
{
public:
    Fee(int){};
    Fee(const Fi&){};
    ~Fee(){};
};
int main(){

    // Fee fee=1; //Fee(int )
    Fi fi;    
    Fee fum=fi; //Fee(fi)  Fum(const Fee &)
    fum=fi;     //Fee(fi)  operator=(consr Fee &)

    return 0;
}

  • 赋值运算符重载
T & T::operator=(const T & rhs){
//check for self assignment
if(this != &rhs){
	//perform assignment
}
return *this;
}
class A{
char * p;
A& operator=(const A& that)
{
delete p;
p=new [strlenstrlen(strlen(that.p))+1];  //如果p相同,则that.p不指向原来的空间,则失败
strcp(p,that.p);
return *this;
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值