C++实现:学生通讯录类设计

需积分: 14 2 下载量 152 浏览量 更新于2024-09-13 收藏 120KB DOC 举报
"该资源是一个C++编程任务,要求创建一个名为CStudent的学生通讯录类。类应包含学号、姓名、院系、通讯地址和电话等数据成员,并提供相应的设置和获取方法。同时,提供了类的实现部分,包括构造函数和成员函数的定义。" 在C++编程中,类(Class)是面向对象编程的基础,它是一种用户自定义的数据类型,可以封装数据和操作数据的方法。在这个任务中,`CStudent` 类就是用来表示学生通讯录条目的一个类。下面我们将详细讨论这个类的设计和实现。 首先,`CStudent` 类的数据成员包括: 1. `int number`: 学号,用整型变量表示。 2. `char* p_name`: 姓名,用指向字符的指针表示,以动态内存分配存储姓名字符串。 3. `char* p_school`: 院系,同样用指向字符的指针表示,动态内存分配存储院系字符串。 4. `char* p_address`: 通讯地址,用指向字符的指针表示,动态内存分配存储地址字符串。 5. `char tel[15]`: 电话,用固定长度的字符数组存储电话号码。 接下来是类的公共(public)成员函数: 1. `void show()`: 输出数据成员,用于显示学生通讯录的所有信息。 2. `CStudent(int un, char* pn, char* ps, char* pa, char t[])`: 构造函数,初始化学生通讯录的各个数据成员。 3. `void setname(char* name)`: 设置姓名,接受一个字符串参数,动态分配内存并复制到`p_name`。 4. `void setnumber(int nu)`: 设置学号,直接将输入的整数赋值给`number`。 5. `void setschool(char* school)`: 设置院系,动态分配内存并复制到`p_school`。 6. `void setaddress(char* address)`: 设置通讯地址,动态分配内存并复制到`p_address`。 7. `void settel(char t[])`: 设置电话,将电话号码字符串复制到`tel`数组。 在类的实现中,使用了动态内存分配来存储姓名、院系和通讯地址,这是因为这些数据的长度在编译时未知,所以需要在运行时根据实际输入的长度来分配内存。动态内存分配使用了C++的`new`运算符,确保有足够的空间存储字符串。同时,使用`strcpy`函数来复制字符串。 需要注意的是,这个类没有包含析构函数来释放动态分配的内存,这可能导致内存泄漏。在实际使用时,应该添加一个析构函数来释放这些内存,例如: ```cpp ~CStudent() { delete[] p_name; delete[] p_school; delete[] p_address; } ``` 此外,为了遵循良好的编程实践,还可以考虑添加成员函数来获取各个数据成员的值(如`getName`、`getSchool`等),以及重载`<<`运算符以方便将`CStudent`对象直接输出到`std::ostream`。 总结,这个`CStudent`类提供了对学生通讯录条目进行操作的基本功能,包括数据的读取和写入。然而,为了提高代码的完整性和健壮性,还需要考虑内存管理、错误处理以及可能的扩展性需求,例如增加对学生信息的搜索、排序或添加删除功能。