重载赋值运算符

Posted overlows

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了重载赋值运算符相关的知识,希望对你有一定的参考价值。

//
//  main.cpp
//  运算符重载(Overloading)
//  默认复制构造函数(Default Copy Constructor)
//  Created by mac on 2019/4/29.
//  Copyright ? 2019年 mac. All rights reserved.
//  析构函数是一个成员函数,当对象被销毁时,该函数被自动调用。
//  析构函数是具有与类相同名称的公共(public)成员函数
//  构造函数私有化之后就无法在类外生成对象。
//  结构体能否支持继承
//  复制构造函数只能在创建对象并在初始化对象时起作用,复制构造函数不能在赋值(Assignment)中调用。
//  复制构造函数开始有点遗忘了。


#include <iostream>
#include <iomanip>

using namespace std;

class NumberArray{
private:
    double *aPtr;
    int arraySize;

public:
    NumberArray & operator= (const NumberArray &right);//重载赋值运算符=      (重载运算符函数)
    ~NumberArray(){if (arraySize>0) delete []aPtr;}
    NumberArray(const NumberArray &);
    NumberArray(int size,double value);
    void print()const;
    void setValue(double value);
};

//重载赋值运算符=
NumberArray & NumberArray::operator=(const NumberArray &right){
    if(this!=&right){
        if(this->arraySize>0){
            delete [] aPtr;
        }
        
        this->arraySize=right.arraySize;
        aPtr=new double[this->arraySize];
        for (int index=0; index<arraySize; ++index) {
            this->aPtr[index]=right.aPtr[index];
        }
        
    }
    return *this;
}

//复制构造函数
NumberArray::NumberArray(const NumberArray &obj){
    if(this->arraySize>0){
        delete [] aPtr;
    }
    this->arraySize=obj.arraySize;
    aPtr=new double[this->arraySize];
    for (int index=0; index<this->arraySize; ++index) {
        aPtr[index]=obj.aPtr[index];
    }
    
}

//构造函数
NumberArray::NumberArray(int size,double value){
    this->arraySize=size;
    aPtr=new double[arraySize];
    setValue(value);
}

//用value值初始化整个数组
void NumberArray::setValue(double value){
    for (int index=0; index<this->arraySize; ++index) {
        aPtr[index]=value;
    }
    
}

//打印整个数组
void NumberArray::print()const{
    for (int index=0;index<arraySize; ++index) {
        cout<<aPtr[index]<<" ";
    }
}

int main(int argc, const char * argv[]) {
    NumberArray first(3,10.5);
    NumberArray second(5,20.5);
    cout<<setprecision(2)<<fixed<<showpoint;
    cout<<"First object's data is ";
    first.print();
    cout<<endl<<"Second object's data is ";
    second.print();
    
    //调用重载运算符
    cout<<"\nNow we will assign the second object "<<"to the first."<<endl;
    
    first=second;
    
    //打印赋值以后两个对象里面的新的值
    cout<<"First object's data is ";
    first.print();
    cout<<endl<<"Second object's data is ";
    second.print();
    
    return 0;
}

运行结果:

First object's data is 10.50 10.50 10.50 
Second object's data is 20.50 20.50 20.50 20.50 20.50 
Now we will assign the second object to the first.
First object's data is 20.50 20.50 20.50 20.50 20.50 
Second object's data is 20.50 20.50 20.50 20.50 20.50 Program ended with exit code: 0

以上是关于重载赋值运算符的主要内容,如果未能解决你的问题,请参考以下文章

虚拟赋值运算符重载——如何选择正确的重载函数?

重载“着色器”类中的赋值运算符

赋值运算符重载函数 引用返回 与 对象返回

Kotlin中复合赋值(+=,-=,……)运算符重载

free():在调用重载赋值运算符时在 tcache 2 中检测到双重空闲

类和对象—4