拷贝构造函数的完整例子
时间: 2023-07-08 21:27:12 浏览: 41
这里是一个拷贝构造函数的完整例子,以说明如何创建一个新对象并将其初始化为另一个对象的副本:
```
#include <iostream>
using namespace std;
class MyClass {
public:
int x;
MyClass(int a) { x = a; } // 普通构造函数
MyClass(const MyClass &obj) { x = obj.x; } // 拷贝构造函数
};
int main() {
MyClass obj1(10); // 创建一个对象并初始化为10
MyClass obj2 = obj1; // 创建一个新对象并将其初始化为obj1的副本
cout << obj2.x << endl; // 输出结果为10
return 0;
}
```
在这个例子中,我们定义了一个名为MyClass的类,并定义了一个有参构造函数和一个拷贝构造函数。在主函数中,我们首先创建了一个对象obj1并将其初始化为10。然后,我们使用拷贝构造函数创建了一个新对象obj2,并将其初始化为obj1的副本。最后,我们输出了obj2的x成员变量,结果为10。
需要注意的是,拷贝构造函数的参数应该是一个常量引用,以避免在复制对象时对原始对象进行更改。
相关问题
请帮我举一下拷贝构造函数的例子
好的,以下是一个拷贝构造函数的例子:
```
#include <iostream>
using namespace std;
class Person {
public:
int age;
string name;
Person() {
age = 0;
name = "";
}
// 拷贝构造函数
Person(const Person& p) {
age = p.age;
name = p.name;
}
void display() {
cout << "Name: " << name << endl;
cout << "Age: " << age << endl;
}
};
int main() {
Person p1;
p1.age = 20;
p1.name = "Tom";
Person p2(p1); // 调用拷贝构造函数进行复制
p1.display();
p2.display();
return 0;
}
```
在上面的例子中,我们定义了一个 `Person` 类,并且实现了一个拷贝构造函数。在 `main` 函数中,我们首先创建了一个 `Person` 类型对象 `p1`,并且给其成员变量赋值。然后我们使用 `p1` 对象来创建了另外一个对象 `p2`,在这个过程中就会调用拷贝构造函数进行复制。最后我们调用了 `display` 函数来显示两个对象的属性。
C++拷贝构造函数
C++中的拷贝构造函数是一种特殊的构造函数,它用于创建一个新对象,该对象是通过另一个同类型对象进行初始化而创建的。通常情况下,拷贝构造函数用于复制对象的值,以便在程序中进行操作时不会影响原始对象。
拷贝构造函数的声明形式如下:
```c++
class MyClass {
public:
MyClass(); // 默认构造函数
MyClass(const MyClass& obj); // 拷贝构造函数
};
```
其中,参数类型为 `const MyClass&`,表示该构造函数接受一个常量引用类型的参数。在函数内部,我们可以使用传递给它的对象的值来初始化新对象。例如,下面是一个使用拷贝构造函数的例子:
```c++
class MyClass {
public:
int x;
MyClass() { x = 0; } // 默认构造函数
MyClass(const MyClass& obj) { x = obj.x; } // 拷贝构造函数
};
int main() {
MyClass obj1;
obj1.x = 10;
MyClass obj2(obj1); // 使用拷贝构造函数初始化 obj2
std::cout << obj2.x << std::endl; // 输出 10
return 0;
}
```
在上面的例子中,我们定义了一个 `MyClass` 类,它有一个整型成员变量 `x`。我们使用默认构造函数初始化了 `obj1`,并将 `x` 的值设置为 10。然后,我们使用拷贝构造函数初始化 `obj2`,并打印出 `x` 的值,输出结果为 10。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)