c++,设计一个person类,其属性包括name和id,其中name属性为指针,分别利用person类构造函数和拷贝构造函数建立对象,打印每个person类对象的信息。要求分别编写浅拷贝构造函数和深拷贝构造函数调试程序。
时间: 2024-12-08 16:18:11 浏览: 65
指向类中成员函数的指针变量-c++程序设计(谭浩强)
在C++中,我们可以设计一个`Person`类,包含姓名`name`和ID`id`两个私有成员变量,同时提供构造函数、浅拷贝构造函数和深拷贝构造函数。以下是相关代码:
```cpp
#include <iostream>
#include <string>
class Person {
private:
std::string* name; // 指针类型的name属性
int id;
public:
// 构造函数
Person(const std::string& name, int id) : name(new std::string(name)), id(id) {}
// 浅拷贝构造函数(默认实现,共享资源)
Person(const Person& other) : name(other.name), id(other.id) {} // 这是一个浅拷贝,因为name是指针,只复制了地址
// 深拷贝构造函数(防止资源泄漏)
Person(Person const& other) :
name(new std::string(*other.name)), // 深度复制字符串内容
id(other.id) {}
~Person() { // 释放内存
delete name;
}
void printInfo() const {
std::cout << "Name: " << *name << ", ID: " << id << std::endl;
}
// 调试用的友元函数
friend std::ostream& operator<<(std::ostream& os, const Person& p);
};
// 输出Person对象到流
std::ostream& operator<<(std::ostream& os, const Person& p) {
p.printInfo();
return os;
}
int main() {
Person person1("Alice", 123456);
Person person2(person1); // 使用浅拷贝构造函数
Person person3(person1); // 使用深拷贝构造函数
person1.printInfo(); // 打印person1信息
person2.printInfo(); // 打印person2信息
person3.printInfo(); // 打印person3信息
return 0;
}
```
在这个例子中,当我们创建`person2`和`person3`时,会分别使用浅拷贝构造函数和深拷贝构造函数。浅拷贝只是指向`name`对象的指针,而深拷贝则复制了`name`对象的内容。
阅读全文