21xrx.com
2024-12-22 16:53:22 Sunday
登录
文章检索 我的文章 写文章
C++深拷贝示例代码
2023-06-27 22:49:14 深夜i     --     --
C++ 深拷贝 示例代码

C++是一门广泛使用的编程语言,它在软件开发方面占据着重要的地位。在开发过程中,开发者经常需要使用到深拷贝技术。深拷贝是指将一个对象的所有成员变量,包括指向其他对象的指针所指向的对象,复制到一个新的对象中的过程。下面是一个C++深拷贝示例代码。


#include <iostream>

using namespace std;

class Person {

  private:

    string name;

    int age;

  public:

    Person(string n, int a)

      name = n;

      age = a;

    

    string getName()

      return name;

    

    int getAge()

      return age;

    

};

class Address {

  private:

    string street;

    string city;

    string state;

  public:

    Address(string s, string c, string st)

      street = s;

      city = c;

      state = st;

    

};

class Employee {

  private:

    string id;

    Person* person;

    Address* address;

  public:

    Employee(string i, Person* p, Address* a)

      id = i;

      person = p;

      address = a;

    

    string getId()

      return id;

    

    Person* getPerson()

      return person;

    

    Address* getAddress()

      return address;

    

    Employee* clone() {

      Person* p = new Person(person->getName(), person->getAge());

      Address* a = new Address(address->getStreet(), address->getCity(), address->getState());

      Employee* e = new Employee(id, p, a);

      return e;

    }

};

int main() {

  Person* p = new Person("Tom", 30);

  Address* a = new Address("123 Main St", "Anytown", "CA");

  Employee* e1 = new Employee("001", p, a);

  Employee* e2 = e1->clone();

  cout << e1->getPerson()->getName() << ", " << e1->getPerson()->getAge() << endl;

  cout << e1->getAddress()->getStreet() << ", " << e1->getAddress()->getCity() << ", " << e1->getAddress()->getState() << endl;

  cout << e2->getPerson()->getName() << ", " << e2->getPerson()->getAge() << endl;

  cout << e2->getAddress()->getStreet() << ", " << e2->getAddress()->getCity() << ", " << e2->getAddress()->getState() << endl;

  e2->getPerson()->~Person();

  e2->getAddress()->~Address();

  e2->~Employee();

  e1->getPerson()->~Person();

  e1->getAddress()->~Address();

  e1->~Employee();

  return 0;

}

该示例代码定义了三个类:Person、Address和Employee。Person类表示一个人,包括姓名和年龄;Address类表示一个地址,包括街道、城市和州份;Employee类表示一个雇员,包括ID、Person对象和Address对象。

Employee类中有一个clone函数,该函数可以复制一个Employee对象。在复制时,首先需要复制其Person对象和Address对象,然后再将它们与新的Employee对象一起组合成一个新的对象返回。

在main函数中,我们创建了两个Employee对象e1和e2,然后输出它们的姓名、年龄、街道、城市和州份。接着调用了Employee对象的析构函数来释放内存。通过使用深拷贝技术,这些对象的所有成员变量都被成功地复制了。

总之,深拷贝是C++中常用的技术,可以帮助开发人员创建新的对象并复制其所有成员变量。该示例代码提供了一个简单但有用的例子,可以帮助读者更好地理解深拷贝技术。

  
  

评论区

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