21xrx.com
2024-12-22 21:09:16 Sunday
登录
文章检索 我的文章 写文章
C++对象的赋值操作
2023-07-07 21:27:40 深夜i     --     --
C++ 对象 赋值操作

在C++中,对象的赋值操作是非常重要的。当我们创建一个对象时,这个对象包含了一些数据和方法,以及一些特定的属性和行为。当我们需要将一个对象的值赋给另一个对象时,我们必须了解C++对象的赋值操作,以确保我们正确地复制了对象的数据和状态。

对象的赋值操作是指将一个对象的值赋给另一个对象。在C++中,我们可以直接使用“=”符号来进行对象的赋值操作。例如:

Person p1("Tom", 20);

Person p2 = p1; // 这里将p1的值赋给了p2

在这个例子中,我们创建了两个Person对象,然后将p1的值赋给了p2。这里的赋值操作并不是简单的复制p1的内存地址或值,而是复制整个对象的值,包括成员变量和成员函数。

C++对象的赋值操作有两种形式:浅拷贝和深拷贝。在浅拷贝中,我们只是简单地复制一个对象的地址,而不是其实际的值。这意味着如果我们更改了其中一个对象的状态,那么它将会影响到另一个对象。例如:

class Person {

public:

  string name;

  int age;

  int* id;

  Person() {

    name = "";

    age = 0;

    id = new int(0);

  }

  Person(string n, int a, int i) {

    name = n;

    age = a;

    id = new int(i);

  }

  Person(const Person& p)

    name = p.name;

    age = p.age;

    id = p.id;

  ~Person()

    delete id;

};

Person p1("Tom", 20, 123);

Person p2 = p1;

*p1.id = 456;

cout << *p2.id << endl; // 输出456

在这个例子中,我们创建了两个Person对象p1和p2,并将p1的值赋给了p2。然后,我们将p1的id指向的值更改为了456,这导致p2.id指向的值也发生了更改。这是因为我们使用了浅拷贝,p2只是复制了p1的地址,而不是它的值。因此,如果我们更改其中一个对象的状态,那么它将会影响到另一个对象。

深拷贝是另一种C++对象的赋值操作。在深拷贝中,我们实际上是复制了一个对象的所有值,包括成员变量和成员函数。这意味着如果我们更改了其中一个对象的状态,那么它不会影响到另一个对象。例如:

class Person {

public:

  string name;

  int age;

  int* id;

  Person() {

    name = "";

    age = 0;

    id = new int(0);

  }

  Person(string n, int a, int i) {

    name = n;

    age = a;

    id = new int(i);

  }

  Person(const Person& p) {

    name = p.name;

    age = p.age;

    id = new int(*p.id);

  }

  ~Person() {

    delete id;

  }

};

Person p1("Tom", 20, 123);

Person p2 = p1;

*p1.id = 456;

cout << *p2.id << endl; // 输出123

在这个例子中,我们创建了两个Person对象p1和p2,并将p1的值赋给了p2。然后,我们将p1的id指向的值更改为了456,但是p2.id指向的值仍然是123。这是因为我们使用了深拷贝,p2复制了p1的所有值,这意味着它们是独立的对象。

总之,C++对象的赋值操作是非常重要的。我们必须了解浅拷贝和深拷贝的区别,并确保我们正确地复制了对象的值和状态。如果我们使用浅拷贝,那么我们必须注意更改一个对象的状态是否会影响到另一个对象。如果我们使用深拷贝,那么我们可以放心地更改一个对象的状态,而不用担心影响到另一个对象。

  
  

评论区

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