头歌程序设计(面向对象)_实训7_赋值运算符重载

 

第一关:拷贝赋值运算符重载

/**
 * 这是一个包装类(wrapper class),包装类在C++中有点小小的用处(基本上没用),在Java中的用处更大一些。
 */
#ifndef _INT_H_  //这是define guard 
#define _INT_H_  //在C和C++中,头文件都应该有这玩意 

class Int{
private://这是访问控制——私有的 
    int value; //这是数据成员,我们称Int是基本类型int的包装类,就是因为Int里面只有一个int类型的数据成员 
    
public:    //这是公有的 
    Int():value(0){}
    Int(Int const&rhs):value(rhs.value){}
    Int(int v):value(v){}
    
    int getValue()const{return value;}
    void setValue(int v){value=v;}

    //拷贝赋值运算符重载
    Int& operator = (const Int&rhs){
        //在这里写具体实现,注意做自我赋值的检测
        if(this!=&rhs)
        {
            value=rhs.value;
        }
        return *this;
        
    }

};//记住这里有一个分号 

#endif

第二关:其他赋值运算符重载

/**
 * 这是一个包装类(wrapper class),包装类在C++中有点小小的用处(基本上没用),在Java中的用处更大一些。
 */
#ifndef _INT_H_  //这是define guard 
#define _INT_H_  //在C和C++中,头文件都应该有这玩意 

class Int{
private://这是访问控制——私有的 
    int value; //这是数据成员,我们称Int是基本类型int的包装类,就是因为Int里面只有一个int类型的数据成员 
    
public:    //这是公有的 
    Int():value(0){}
    Int(Int const&rhs):value(rhs.value){}
    
    int getValue()const{return value;}
    void setValue(int v){value=v;}

    //其他赋值运算符重载
    Int& operator = (int rhs){
        //在这里写具体实现
        value=rhs;
    }

};//记住这里有一个分号 

#endif

第三关:算术复合赋值符运算符重载

​
/**
 * 这是一个包装类(wrapper class),包装类在C++中有点小小的用处(基本上没用),在Java中的用处更大一些。
 */
#ifndef _INT_H_  //这是define guard 
#define _INT_H_  //在C和C++中,头文件都应该有这玩意 

class Int{
private://这是访问控制——私有的 
    int value; //这是数据成员,我们称Int是基本类型int的包装类,就是因为Int里面只有一个int类型的数据成员 
    
public:    //这是公有的 
    Int():value(0){}
    Int(Int const&rhs):value(rhs.value){}
    Int(int v):value(v){}
    
    int getValue()const{return value;}
    void setValue(int v){value=v;}

    //算术复合赋值运算符运算符重载
    Int& operator += (const Int&rhs){
        //在这里实现算术复合赋值运算符
       value+=rhs.value;
    }

};//记住这里有一个分号 

#endif

​

第四关:复用算术运算符重载复合赋值运算符

#include"Int.h"
Int& Int::operator = (const Int&rhs)
{
    value=rhs.value;
}
Int& Int::operator += (const Int&rhs)
{
    value+=rhs.value;
}
Int operator + (const Int&lhs,const Int&rhs)
{
    Int m;
    m.setValue(lhs.getValue()+rhs.getValue());
    return m;
}

第五关:复用复合赋值运算符重载算术运算符

/********** BEGIN **********/
#include"Int.h"
Int& Int::operator = (const Int&rhs)
{
    value=rhs.value;
}
Int& Int::operator += (const Int&rhs)
{
    value+=rhs.value;
}
Int operator + (const Int&lhs,const Int&rhs)
{
    Int m;
    m.setValue(lhs.getValue()+rhs.getValue());
    return m;
}



/********** END **********/

  • 3
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
赋值运算符重载是指为一个类定义一个赋值运算符,以实现在对象间赋值的操作。在 C++ 中,赋值运算符重载函数的函数名必须为 operator=,其格式如下: ``` class_name& operator=(const class_name& rhs){ //实现赋值操作 return *this; } ``` 其中,class_name 为类名,rhs 为右操作数,即赋值号右侧的值。重载赋值运算符函数必须返回一个指向当前对象的引用,以支持链式赋值操作。 下面是一个实现自定义类的赋值运算符重载的例子: ```c++ #include <iostream> using namespace std; class MyString { public: MyString() : buffer(NULL), size(0) { } MyString(const char* input) { if (input != NULL) { size = strlen(input); buffer = new char[size + 1]; strcpy(buffer, input); } else { buffer = NULL; size = 0; } } MyString(const MyString& copySource) { if (copySource.buffer != NULL) { size = copySource.size; buffer = new char[size + 1]; strcpy(buffer, copySource.buffer); } else { buffer = NULL; size = 0; } } ~MyString() { if (buffer != NULL) { delete[] buffer; buffer = NULL; size = 0; } } MyString& operator=(const MyString& copySource) { if ((this != &copySource) && (copySource.buffer != NULL)) { if (buffer != NULL) { delete[] buffer; } size = copySource.size; buffer = new char[size + 1]; strcpy(buffer, copySource.buffer); } return *this; } int GetLength() const { return size; } const char* GetString() const { return buffer; } private: char* buffer; unsigned int size; }; int main() { MyString str1("Hello"); MyString str2("World"); str2 = str1; cout << str2.GetString() << endl; return 0; } ``` 在上面的例子中,MyString 类重载了赋值运算符=,实现了一个深拷贝的操作。当赋值号左右两侧的对象不相同时,才进行赋值操作。同时,在进行赋值操作前,会先释放已有的 buffer,再根据源字符串的长度重新分配内存。 运行结果为: ``` Hello ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值