练习对字符串的常用操作,进而加深对类的多态性的理解: 如运算符重载和函数重载 字符串连接,+=运算符重载 求子串: 左边几个字符,,, Left(int nCount) 右边几个,, Right(int nCount) 某个位置开始的几个字符 Mid(int nPos,int nCout) 2..进一步熟悉掌握对类的构造函数重载,拷贝构造的使用 目录: 程序代码实现部分: p2----p6 实验结果部分: P7 实验中遇到问题及解决方法: P7----P9 实验心得: P9 ### 运算符重载和函数重载 #### 概述 在面向对象编程中,重载是一种重要的机制,它允许我们为同一个名称定义多个不同的实现。这不仅可以提高代码的可读性和简洁性,还可以更好地封装行为。在C++中,重载主要分为两种类型:运算符重载和函数重载。 #### 字符串类的设计与实现 在本实验中,通过设计一个简单的字符串类`TString`来练习运算符重载和函数重载的概念,并深入理解类的多态性。 #### 运算符重载 运算符重载是指通过定义特定成员函数来重新定义内置运算符的行为,使其能够应用于自定义数据类型。例如,在`TString`类中实现了`+=`运算符重载,以便可以方便地将两个字符串对象连接起来。 **`+=`运算符重载** ```cpp void TString::operator+=(TString& src) { if (src.StrVar == NULL) return; if (this->StrVar) { int len = this->length + strlen(src.StrVar); char* temp = this->StrVar; this->StrVar = new char[len + 1]; strcpy(this->StrVar, temp); strcat(this->StrVar, src.StrVar); this->length = len; delete[] temp; } else { this->StrVar = new char[strlen(src.StrVar) + 1]; strcpy(this->StrVar, src.StrVar); this->length = strlen(src.StrVar); } } ``` 上述代码实现了将另一个`TString`对象的内容添加到当前对象的方法。首先检查源字符串是否为空,如果不为空,则计算新的字符串长度并重新分配内存,然后复制原始内容和新内容,并更新长度。 #### 函数重载 函数重载是指在同一作用域内定义同名但参数列表不同的多个函数。这对于提供灵活性非常有用,可以根据不同类型的输入返回合适的结果。 **求子串功能** 在`TString`类中,实现了几个获取子串的功能,包括: - `Left(int nCount)`:返回字符串左边的`nCount`个字符。 - `Right(int nCount)`:返回字符串右边的`nCount`个字符。 - `Mid(int nPos, int nCount)`:从位置`nPos`开始返回连续的`nCount`个字符。 这些函数的实现如下: ```cpp char* TString::Left(int nCount) { this->Length(); if (this->length < nCount) return NULL; char* temp = new char[nCount + 1]; for (int i = 0; i < nCount; i++) temp[i] = *(StrVar + i); return temp; } char* TString::Right(int nCount) { this->Length(); if (this->length < nCount) return NULL; char* temp = new char[nCount + 1]; int j = length - nCount; for (int i = 0; i < nCount; i++, j++) temp[i] = *(StrVar + j); return temp; } char* TString::Mid(int nPos, int nCount) { this->Length(); if (this->length < nCount) return NULL; char* temp = new char[nCount + 1]; for (int i = 0, j = nPos; i < nCount; i++, j++) temp[i] = *(StrVar + j); return temp; } ``` 这些函数通过循环遍历字符串并创建新的子串,从而返回相应的子串。 #### 类的构造函数重载与拷贝构造函数 构造函数用于初始化对象的状态。在C++中,可以通过重载构造函数来提供多种初始化方式。此外,拷贝构造函数是一种特殊的构造函数,用于从已存在的对象初始化新对象。 **构造函数重载** ```cpp TString() { StrVar = NULL; } TString(const TString& src) { /* 深拷贝实现 */ } TString(const char* src) { SetValue(src); } ``` - 默认构造函数:创建一个空字符串。 - 拷贝构造函数:从另一个`TString`对象创建一个新的对象,需要注意深拷贝以避免潜在的问题。 - 构造函数接受一个`char*`参数,用于初始化字符串的内容。 **拷贝构造函数** 拷贝构造函数是特别重要的,因为它确保了当一个对象被拷贝或赋值给另一个对象时,不会出现资源冲突。实现拷贝构造函数时,通常需要进行深拷贝,即复制所有的数据成员,而不是仅仅复制指针。 #### 总结 通过这个实验,不仅练习了如何对字符串执行常见操作,而且还加深了对类的多态性的理解,尤其是通过运算符重载和函数重载。此外,还熟悉了构造函数重载以及拷贝构造函数的使用,这些都是编写高质量、可维护代码的关键技能。通过实际编码和调试,可以更深入地理解这些概念,并学习如何有效地管理内存和资源。











剩余8页未读,继续阅读


- 粉丝: 862
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源


