声明一个 Employee 类,其中包括姓名、地址(使用指针,动态分配空间和设置内容)、邮编等属性,以及 change name、change_address和 display等函数。display()显示姓名、地址、邮编等属性, change_name改变对象的姓名属性,change_address更改地址信息。(可使用cstring函数库中的strcpy、strlen函数) 注意有动态内存分配new操作就要有动态内存释放delete操作。 提示:要有构造函数、拷贝构造函数、析构函数,在构造函数中使用new分配address空间并拷贝内容。
时间: 2023-06-16 14:07:37 浏览: 51
以下是一个简单的实现:
```c++
#include <iostream>
#include <cstring>
using namespace std;
class Employee {
private:
char *name;
char *address;
char zipcode[10];
public:
Employee(const char *n, const char *a, const char *z) {
name = new char[strlen(n) + 1];
strcpy(name, n);
address = new char[strlen(a) + 1];
strcpy(address, a);
strcpy(zipcode, z);
}
Employee(const Employee &e) {
name = new char[strlen(e.name) + 1];
strcpy(name, e.name);
address = new char[strlen(e.address) + 1];
strcpy(address, e.address);
strcpy(zipcode, e.zipcode);
}
~Employee() {
delete[] name;
delete[] address;
}
void change_name(const char *n) {
delete[] name;
name = new char[strlen(n) + 1];
strcpy(name, n);
}
void change_address(const char *a) {
delete[] address;
address = new char[strlen(a) + 1];
strcpy(address, a);
}
void display() const {
cout << "Name: " << name << endl;
cout << "Address: " << address << endl;
cout << "Zipcode: " << zipcode << endl;
}
};
int main() {
Employee e("John Smith", "123 Main St.", "12345");
e.display();
e.change_name("Jane Doe");
e.change_address("456 Oak St.");
e.display();
return 0;
}
```
在这里,我们使用了动态内存分配来存储字符串,因为我们不知道每个字符串的长度。在构造函数中,我们使用了`new`操作符来分配内存,并使用`strcpy`函数将传递给构造函数的字符串复制到新分配的内存中。
在拷贝构造函数中,我们使用与构造函数类似的代码来复制`name`,`address`和`zipcode`。我们需要确保在拷贝构造函数中分配新内存,而不是简单地使用指针复制原始对象的地址。
在析构函数中,我们使用`delete[]`操作符释放动态分配的内存。
`change_name`和`change_address`函数使用与构造函数类似的代码来更改字符串。我们需要先删除旧内存,然后分配新内存,并将新字符串复制到其中。
最后,`display`函数只是简单地打印`name`,`address`和`zipcode`。