21xrx.com
2024-06-03 04:31:44 Monday
登录
文章检索 我的文章 写文章
C++自定义类的拷贝构造函数详解
2023-07-08 10:21:37 深夜i     --     --
C++ 自定义类 拷贝构造函数 详解

C++作为一种面向对象编程语言,支持自定义类。在这些自定义类中,我们经常需要使用拷贝构造函数来实现对象的复制。本文将详细介绍C++自定义类的拷贝构造函数的定义、特点和使用方法。

1. 拷贝构造函数定义

拷贝构造函数是一种特殊的构造函数,用于将一个对象复制到另一个对象中。它的定义如下:

class MyClass {

public:

  MyClass();

  MyClass(const MyClass&); // 拷贝构造函数

};

在上述定义中,MyClass(const MyClass&)表示拷贝构造函数,其中括号中的“const MyClass&”表示参数类型,即传递给拷贝构造函数的对象的引用。

2. 拷贝构造函数的特点

- 拷贝构造函数只有一个入参,类型为当前类的常量引用。

- 拷贝构造函数没有返回值,也不允许有返回值。

- 拷贝构造函数在对象被初始化时自动调用,不能手动调用。

- 拷贝构造函数是浅拷贝,即仅仅拷贝指针,不会拷贝指针指向的内容。

3. 拷贝构造函数的使用方法

使用拷贝构造函数,可以将一个对象的值复制到另一个对象中。下面的示例代码演示了如何使用拷贝构造函数:

#include

using namespace std;

class MyClass {

public:

  MyClass();

  MyClass(const MyClass&); // 拷贝构造函数

  void setValue(int v) {

    *pValue = v;

  }

  int getValue() const {

    return *pValue;

  }

private:

  int* pValue;

};

// 默认构造函数

MyClass::MyClass()

  pValue = new int;

// 拷贝构造函数

MyClass::MyClass(const MyClass& other) {

  pValue = new int(*other.pValue);

}

int main() {

  MyClass obj1;

  obj1.setValue(10);

  cout << "obj1.value:" << obj1.getValue() << endl;

  MyClass obj2 = obj1; // 这里调用了拷贝构造函数

  cout << "obj2.value:" << obj2.getValue() << endl;

  obj2.setValue(20);

  cout << "obj1.value:" << obj1.getValue() << endl;

  cout << "obj2.value:" << obj2.getValue() << endl;

  return 0;

}

上面的代码中,MyClass类有一个int类型的成员变量pValue指针,可以通过setValue()和getValue()方法对它进行赋值和读取。拷贝构造函数中,我们通过使用new运算符分配一个新的内存空间,然后将被复制对象的pValue指向的内容复制到新的内存空间中。这样就可以实现拷贝构造函数的功能了。

4. 总结

拷贝构造函数是C++自定义类中获取某一个对象的复制进行初始化另外一个对象的函数。它是一种特殊的构造函数,用于将一个对象复制到另一个对象中。拷贝构造函数有一些特点,例如,只有一个入参,不能手动调用,不容许有返回值等。在使用拷贝构造函数时,需要注意,它仅仅是浅拷贝,不会拷贝指针指向的内容。

  
  

评论区

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