我们前面把该熟悉的都说了一遍,现在我们来看看类与对象中的第四个默认成员函数,那就是赋值运算符的重载,因为这个和运算符的重载都是一样的,所以,就放在一起说了。
首先我们要知道的是,类与对象是一个自定义类型,那么,你有没有想过下面的这种情况呢?
#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
个运算符不能重载。
以上就是本篇的所有内容,如果对你有帮助的话,希望大家支持一下!!!