21xrx.com
2024-12-22 22:29:29 Sunday
登录
文章检索 我的文章 写文章
C++对象的赋值操作
2023-07-10 08:42:47 深夜i     --     --
C++ 对象 赋值操作

C++是一种面向对象的编程语言,它允许我们创建各种类型的对象并对它们进行各种操作。其中,对象的赋值操作是非常常见的一种操作,它允许我们将一个对象的数据复制到另一个对象中,从而实现数据共享或者数据传递的功能。

C++对象的赋值操作可以分为两种类型:浅拷贝和深拷贝。浅拷贝是指直接将一个对象的指针或者引用赋值给另一个对象,这样两个对象就会指向同一个数据,当其中一个对象被改变时,另一个对象的数据也会随之改变。深拷贝则是指创建一个新的数据对象,将原对象的数据复制到新对象中,并将新对象的指针或者引用赋值给另一个对象,这样两个对象就不再共享数据,当其中一个对象被改变时,另一个对象的数据不会受到影响。

在C++中,对象的赋值操作使用“=”运算符实现。当我们将一个对象赋值给另一个对象时,如果对象的类型是基本数据类型或者数组类型,那么就会进行浅拷贝;如果对象是引用类型或者自定义类型,那么就会进行深拷贝。

下面是一个浅拷贝的示例代码:


#include <iostream>

using namespace std;

class MyClass {

public:

  int* ptr;

  MyClass() ptr = new int;

  ~MyClass() delete ptr;

};

int main() {

  MyClass obj1, obj2;

  obj1.ptr = new int(10);

  obj2 = obj1; // 浅拷贝

  cout << *obj1.ptr << endl; // 输出 10

  cout << *obj2.ptr << endl; // 输出 10

  *obj2.ptr = 20; // 修改 obj2 的数据

  cout << *obj1.ptr << endl; // 输出 20

  cout << *obj2.ptr << endl; // 输出 20

  return 0;

}

在上面的代码中,我们定义了一个MyClass类,其中包含一个int类型的指针ptr。在main函数中,我们创建了两个对象obj1和obj2,并将obj1的指针指向一个值为10的整数。然后,我们将obj1赋值给obj2,这样obj2也会指向相同的内存地址,从而实现了浅拷贝的功能。当我们修改obj2的数据时,obj1的数据也会随之改变,因为它们指向的是同一个数据。

下面是一个深拷贝的示例代码:


#include <iostream>

#include <cstring>

using namespace std;

class MyClass {

public:

  int* ptr;

  MyClass() ptr = new int;

  MyClass(const MyClass& other) { ptr = new int; *ptr = *other.ptr; } // 深拷贝构造函数

  ~MyClass() delete ptr;

};

int main() {

  MyClass obj1, obj2;

  obj1.ptr = new int(10);

  obj2 = obj1; // 深拷贝

  cout << *obj1.ptr << endl; // 输出 10

  cout << *obj2.ptr << endl; // 输出 10

  *obj2.ptr = 20; // 修改 obj2 的数据

  cout << *obj1.ptr << endl; // 输出 10

  cout << *obj2.ptr << endl; // 输出 20

  return 0;

}

在上面的代码中,我们在MyClass类中定义了一个深拷贝构造函数,它会创建一个新的数据对象,并将原对象的数据复制到新对象中。在main函数中,我们创建了两个对象obj1和obj2,并将obj1的指针指向一个值为10的整数。然后,我们将obj1赋值给obj2,这样obj2就会创建一个新的数据对象,并将obj1的数据复制到新对象中,从而实现了深拷贝的功能。当我们修改obj2的数据时,obj1的数据不会受到影响,因为它们不再共享数据。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复