C++ 操作符赋值重载

来源:互联网 发布:apache for mac 安装 编辑:程序博客网 时间:2024/05/23 19:20

今天学习了一下操作符重载,着重理解了一下赋值= 操作符

赋值操作符重载成成员函数的格式如下:

对于类A

class A{

};

const A & operator = (const A &x);

使用方法:

A a;

A b;

a=b;

或者a.operator(b);

在这里:

传递过来一个引用类型的变量,是为了防止对象直接的浅拷贝;

前面加一个const 是为了防止通过x来修改其中的成员变量值,保证数据安全。

在这里特别要说一下该函数的返回类型 const A &;

该返回值 代表了表达式a=b的值;同样加const 是为了通过表达式来修改对象中的成员变量的值。这里返回一个引用类型的对象,最大的好处是,可以进行连赋值操作,例如:

A a;

A b;

A c;

a=b=c;

即可进行这种操作;

最后 ,给一个完整的示例验证一下:

Vector.h文件

class  Vector

{

    int *rep;

    int size;

public:

    Vector(int s,int an_array[]);

    ~Vector();

    const Vector &operator=(const Vector& x);// =重载

    void print()const;

};

Vector.cpp文件

Vector::Vector(int s,int an_array[]):size(s),rep(newint[s])

{

    for(int i = 0;i < size;i++)

        rep[i] =an_array[i];

}

Vector::~Vector()

{

    delete rep;

    rep = NULL;

}

const Vector & Vector::operator=(constVector& x)

{

    if(this != &x)

    {

        size =x.size;

        delete [] rep;//释放成员指针的旧堆内存

        rep =newint [size];//为指针成员开辟新内存空间(在堆上)

        for(int i=0;i<size;i++)

            rep[i] = x.rep[i];//向新内存拷贝内容。

    }

    return *this;  

}

void Vector::print()const//输出成员变量的值

{

    cout << size <<endl;

    for(int i=0;i <size;i++)

    {

        cout << rep[i] <<" ";

    }

    cout<<endl;

    

}


#include <iostream>

#include "Vector.h"

using namespace std;

int main(int argc, const char * argv[])

{

    int array1[5]={1,2,3,4,5};

    int array2[10]={6,7,8,9,10,11,12,13,14,15};

    

    Vector vec1(5,array1);

    Vector vec2(10,array2);

    

    vec1.print();

    vec2.print();

    

    vec1=vec2;//调用赋值重载运算符,进行对象间的赋值操作(深拷贝)

    

    (vec1=vec2).print();//通过表达式来输出vec1中变量的值

    

    vec1.print();

    vec2.print();

    return 0;

}



0 0
原创粉丝点击