用C++定义一个网络用户类并进行测试,类的信息有用户ID、用户密码、Email地址。在建立类的实例对象时把以上三个信息作为构造函数的参数输入,其中用户Email地址缺省为用户名加上字符串“@gpnu.edu.cn”.在此题基础上,添
时间: 2023-05-26 22:04:29 浏览: 119
c++ 类的定义 和构造函数
加一个方法可以修改用户密码。最后测试程序应该包括对创建对象、获取对象属性、修改密码等操作的测试。
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 网络用户类
typedef struct {
char* id; // 用户ID
char* pwd; // 用户密码
char* email; // 用户Email地址
} NetUser;
// 构造函数
void NetUser_init(NetUser* user, char* id, char* pwd, char* email) {
user->id = strdup(id);
user->pwd = strdup(pwd);
if (email == NULL) {
int len = strlen(id) + strlen("@gpnu.edu.cn") + 1;
user->email = (char*)malloc(sizeof(char) * len);
sprintf(user->email, "%s@gpnu.edu.cn", id);
} else {
user->email = strdup(email);
}
}
// 修改密码方法
void NetUser_changePwd(NetUser* user, char* newPwd) {
free(user->pwd);
user->pwd = strdup(newPwd);
}
// 测试程序
int main() {
// 创建一个用户对象
NetUser user;
NetUser_init(&user, "testuser", "123456", NULL);
// 获取对象属性
printf("用户名:%s\n", user.id);
printf("密码:%s\n", user.pwd);
printf("Email地址:%s\n", user.email);
// 修改密码
NetUser_changePwd(&user, "abcdef");
printf("新密码:%s\n", user.pwd);
return 0;
}
```
输出结果为:
```
用户名:testuser
密码:123456
Email地址:testuser@gpnu.edu.cn
新密码:abcdef
```
上述代码中,我们使用了字符串相关的函数库来进行字符串的操作(如 `strdup()`、`strlen()`、`sprintf()`),这些函数的用法请自行查找相关文档。同时,我们也在构造函数中使用了一种常用的字符串拼接方法——使用 `sprintf()` 函数将多个字符串连接成一个新的字符串。
此外,我们还需要注意一些动态内存分配的问题——对于使用了 `strdup()` 函数的指针,需要在对象被销毁时调用 `free()` 来释放内存。同时,在构造函数中为 `email` 属性动态分配内存时,也需要在对象被销毁时调用 `free()` 来释放这部分内存。
综上,本题中涉及了动态内存分配、字符串操作、结构体等多个细节问题。在实际工作中,我们需要时刻注意这些问题,同时还要做好异常处理,避免内存泄漏等问题的出现。
阅读全文