复制构造函数与构造函数
时间: 2023-09-10 09:08:52 浏览: 76
复制构造函数和普通构造函数都属于类的构造函数,但它们的功能不同。
普通构造函数用于创建对象并初始化其成员变量。它没有参数或者具有一些参数,用于指定如何初始化对象。
复制构造函数是一种特殊的构造函数,它用于创建一个新对象并将其初始化为现有对象的副本。当一个对象被复制到另一个对象时,复制构造函数会被调用。复制构造函数有一个参数,该参数是要复制的现有对象的引用。
需要注意的是,如果没有定义复制构造函数,编译器会自动生成一个默认的复制构造函数,该函数执行的是逐个拷贝的操作,即将现有对象的每个成员变量复制到新对象中。
总之,构造函数用于创建对象,而复制构造函数用于创建现有对象的副本。
相关问题
构造函数与复制构造函数的实例
下面是一个使用构造函数和复制构造函数的实例:
```c++
#include <iostream>
#include <string>
using namespace std;
class Person {
public:
// 构造函数
Person(string name, int age) : m_name(name), m_age(age) {
cout << "构造函数被调用!" << endl;
}
// 复制构造函数
Person(const Person& p) : m_name(p.m_name), m_age(p.m_age) {
cout << "复制构造函数被调用!" << endl;
}
string getName() const {
return m_name;
}
int getAge() const {
return m_age;
}
private:
string m_name;
int m_age;
};
int main() {
// 使用构造函数创建对象
Person p1("小明", 18);
cout << "p1 姓名:" << p1.getName() << ",年龄:" << p1.getAge() << endl;
// 使用复制构造函数创建对象
Person p2 = p1;
cout << "p2 姓名:" << p2.getName() << ",年龄:" << p2.getAge() << endl;
return 0;
}
```
在上面的代码中,我们定义了一个名为 `Person` 的类,该类具有构造函数和复制构造函数。我们使用构造函数创建了一个 `Person` 类型的对象 `p1`,然后使用复制构造函数创建了一个名为 `p2` 的新对象,该对象是 `p1` 的副本。在输出语句中,我们打印了 `p1` 和 `p2` 的姓名和年龄信息,以便验证复制构造函数的工作原理。
复制构造函数
复制构造函数是一种特殊的构造函数,用于创建一个新对象并将其初始化为现有对象的副本。它通常用于对象的复制和传递。在C++中,复制构造函数是一种接受单一参数的构造函数,该参数是要复制的对象的引用。例如:
```
class MyClass {
public:
MyClass(); // 默认构造函数
MyClass(const MyClass& other); // 复制构造函数
// ...
};
MyClass::MyClass(const MyClass& other) {
// 将 other 对象的成员变量复制到当前对象
// ...
}
```
在使用复制构造函数时,我们可以使用赋值运算符或者使用对象初始化语法来进行对象的复制,例如:
```
MyClass obj1;
MyClass obj2 = obj1; // 使用复制构造函数
MyClass obj3(obj1); // 使用对象初始化语法
```
这样,就可以创建一个新的对象并将其初始化为现有对象的副本。