C++ 拷贝构造函数与赋值运算符的区别

2024年8月28日 | 阅读 4 分钟

C++ 是一种通用、中级、区分大小写、平台无关的计算机语言,支持面向对象编程思想。Bjarne Stroustrup 于 1979 年在贝尔实验室开发了 C++ 编程语言。由于 C++ 是一种平台独立的编程语言,因此它可以在各种操作系统上使用,包括 Windows、Mac OS 和不同的 UNIX 版本。

赋值运算符用于将值赋给上述组中的变量。

在深入研究复制构造函数之前,让我们先了解一下构造函数。当对象被创建时,一个特定的方法(称为构造函数,它与类名同名,并带括号“()”)会自动调用。构造函数用于初始化新创建对象的变量。

复制构造函数是一种构造函数,它使用同一类中已创建的对象来初始化新对象。

现在,让我们回顾一下这个概念的细节,并对比和比较赋值运算符和复制构造函数的特性。

描述赋值运算符

赋值运算符用于为变量赋值。赋值运算符的左操作数是变量名,右操作数是该变量的值。如果两个操作数的数据类型不匹配,将触发编译错误。

赋值运算符有多种形式。

:= 运算符。只将值赋给变量。例如,如果“a=10”,则变量“a”将被赋值为 10。

+= 运算符首先将变量的当前值乘以右侧的值,然后赋新值。

“-=” 运算符首先从右侧的值中减去变量的当前值,然后附加新值。

为了给变量赋新值,*= 运算符首先将变量的当前值乘以右侧的值。

除法运算符 /= 首先将变量的当前值除以右侧的值,然后将新值赋给变量。

赋值运算符示例

下面是赋值运算符的示例。在此示例中,赋值运算符用于为多个变量赋值。

输出

在上面的示例中使用了两个变量“a”和“b”,我们首先使用赋值运算符“=”将“a”的值设置为 5。我们将变量 b 的值赋给了变量 a。上述代码的输出如下所示。

The value of a is 5.
The value of b is 5.

什么是复制构造函数?

程序员经常需要这样做,以便复制一个对象而不影响原始对象。在这种情况下使用复制构造函数。复制构造函数通过使用同一类中已构建的另一个对象初始化新对象来创建对象。复制构造函数有两种类型。

当未声明复制构造函数时,C++ 编译器会创建默认复制构造函数,它会原样复制所有成员变量。

用户定义的复制构造函数:此术语指的是用户已定义的复制构造函数。

语法

复制构造函数的语法是 -

赋值运算符和复制构造函数的比较

所有这些 C++ 概念的主要功能都是赋值,但它们之间的主要区别在于,复制构造函数创建新对象并赋值,而赋值运算符将值赋给同一对象的数据成员,而不是新对象。

下表显示了赋值运算符和复制构造函数之间的主要区别。

拷贝构造函数赋值运算符
复制构造函数是重载构造函数的一个示例。
复制构造函数使用同一类型的现有对象初始化新对象。

赋值运算符是为对象或数据成员赋值的运算符。
它将对象的值从一个已创建的对象转移到另一个对象。
当使用旧对象初始化新对象时,以及当对象作为非引用参数传递给函数时,会调用复制构造函数。当旧对象的值转移到新对象时,使用赋值运算符。
新调用的对象将与先前创建的对象共享不同的内存地址。第一个对象和第二个对象(被赋值第一个对象的值)共享相同的内存地址。