C++ 复制构造函数和赋值运算符的区别
面向对象编程的思想在通用、中级、大小写敏感、与平台无关的计算机语言C++中得到支持。Bjarne Stroustrup于1979年在贝尔实验室开发了C++编程语言。由于C++是一种平台无关的编程语言,它可以在包括Windows、Mac OS和不同的UNIX版本在内的各种操作系统上使用。
赋值运算符用于将值赋给前述的各种变量。
在讲解复制构造函数之前,让我们先学习一些构造函数的知识。当一个对象被创建时,会自动调用一个特定的方法,这个方法被称为构造函数,它与类名相同并带有圆括号“()”。通过构造函数来对新生成的对象的变量进行初始化。
复制构造函数是一种构造函数的形式,它使用来自同一类的已创建对象来初始化新对象。
现在让我们详细了解赋值运算符和复制构造函数的概念,并比较它们的特点。
描述赋值运算符
赋值运算符用于给变量赋值。赋值运算符的左操作数是一个变量名,右操作数是给该变量赋值的值。如果两个操作数的数据类型不匹配,将触发编译错误。
赋值运算符有多种形式。
: =
运算符只给变量赋值。例如,如果”a=10″,变量”a”将被赋值为10。
+=
运算符在赋予新值之前,首先将变量当前的值乘以右侧的值。
-=
运算符在附加新值之前,首先从变量当前的值中减去右侧的值。
*=
运算符首先将变量当前的值乘以右侧的值,以便赋予一个新的值给变量。
/=
运算符首先将变量当前的值除以右侧的值,然后将新的值赋给变量。
赋值运算符示例
以下是赋值运算符的一个示例。在这个示例中,赋值运算符被用来给多个变量赋值。
#include <iostream>
int main() {
// Write C++ code here
int a=5,b;
b=a;
std::cout << "The value of a is "<<a<<"\n";
std::cout << "The value of b is "<<b;
return 0;
}
输出:
在上面的示例中,使用了两个变量“a”和“b”,我们首先使用赋值运算符“=”将“a”的值设置为5。然后,我们将变量b赋予了变量a的值。以上述代码为例,输出结果如下所示。
The value of a is 5.
The value of b is 5.
什么是拷贝构造函数
程序员经常需要这样做,以便在不影响原始对象的情况下复制一个对象。在这种情况下使用拷贝构造函数。拷贝构造函数通过使用已经构造的同类对象来初始化一个对象。拷贝构造函数有两种变体。
当未声明拷贝构造函数时,C++编译器会创建默认的拷贝构造函数,并且它将所有成员变量按照原样进行拷贝。
用户定义的拷贝构造函数:这个术语指的是由用户定义的拷贝构造函数。
语法:
拷贝构造函数的语法为 –
Class_Name(Class_name & oldobject)
{
// Body of constructor
}
赋值运算符和拷贝构造函数的比较
所有这些C++概念的主要功能都是分配值,但它们之间的关键区别在于,拷贝构造函数产生一个新对象并赋值,而赋值运算符将值分配给同一对象的数据成员,而不是新对象。
赋值运算符和拷贝构造函数之间的关键区别如下表所示。
复制构造函数 | 赋值运算符 |
---|---|
重载构造函数的一个示例就是复制构造函数。 使用复制构造函数将现有对象的相同类型初始化一个新对象。 | 将值赋给对象或数据成员的运算符被称为赋值运算符。 它将一个对象的值从一个产生的对象转移到另一个对象。 |
当一个旧对象用于初始化一个新对象,以及当对象作为非引用参数提供给函数时,将调用复制构造函数。 | 当一个旧对象的值被传输到一个新对象时,使用赋值运算符。 |
新调用的对象将与先前生成的对象共享不同的内存地址。 | 第一个对象和第二个对象,第一个对象的值赋给第二个对象,共享相同的内存地址。 |