C++类与对象赋值运算符的重载(运算符的重载)

我们前面把该熟悉的都说了一遍,现在我们来看看类与对象中的第四个默认成员函数,那就是赋值运算符的重载,因为这个和运算符的重载都是一样的,所以,就放在一起说了。

首先我们要知道的是,类与对象是一个自定义类型,那么,你有没有想过下面的这种情况呢?

#include<iostream>
using namespace std;
class A
{
public:
    A()
        :a(2)
        ,b(2)
    {}
    int a;
    int b;
}
int main()
{
    A c;
    A n;
    n=c;
    return 0;
}

像这种情况下,我们想要赋值应该怎么赋值呢?如果是内置类型,不用说,我们经常性的赋值,直接写就可以,但是如果是自定义类型的话我们应该是怎么办呢?所以,这里就出来了个赋值运算符的重载,就是相当于函数重载一样,把赋值这个符号给重载一遍。如下:

#include<iostream>
using namespace std;
class A
{
public:
//构造函数
    A()
        :a(2)
        ,b(2)
    {}
    int a;
    int b;
//赋值运算符的重载
     A& operator=(const A& d)
    {
        a=d.a;
        b=d.b;
        return *this;
    }
}
int main()
{
    A c;
    A n;
    n=c;
    return 0;
}

类似于上面这样,自定义类型虽然不能随便赋值,但是内置类型可以啊,内置类型就是类中的成员变量啊,所以,可以把自定义类型的赋值理解为“大事化小,小事化了”这个思想,所以我们就可以把这个函数给重载一下,可以让他的成员变量分别赋值。所以我们就知道赋值运算符的重载是什意思了。

特别要注意的是运算符重载的函数中,只有赋值运算符的重载是类的默认构造函数,所以,当你不写赋值运算符的重载的时候,编译器会默认生成一个赋值运算的重载,而这个赋值运算符的重载是浅拷贝(值拷贝)。所以在栈等类的对象时,我们一定要注意的是,要用深拷贝来进行类的赋值,所以此时我们就必须要写赋值运算符的重载了。

其他运算符的重载我就不多介绍,和赋值运算符的意义差不多,都是自定义类型进行运算,所以我们要写相应的运算符的重载。唯一要注意的是,下面的这些运算符是不可以重载的:

.* :: sizeof ?: . 注意以上 5 个运算符不能重载。
以上就是本篇的所有内容,如果对你有帮助的话,希望大家支持一下!!!
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值