C++中char*指针成员变量的重载运算符+实现详解

4星 · 超过85%的资源 需积分: 12 3 下载量 199 浏览量 更新于2024-09-16 收藏 657B TXT 举报
本文档主要介绍了如何在C++中重载`operator+()`函数,以便对一个包含`char*`类型成员变量的类进行操作。该类名为`dd`,它具有以下几个关键特性: 1. **构造函数**: - `dd()`:默认构造函数,创建一个空的`dd`对象。 - `dd(char*d)`:接受一个`char*`类型的参数,并将该字符串复制到`P`指向的内存区域,初始化成员变量。 - `dd(dd&d)`:通过引用传递构造函数,用于复制已存在的`dd`对象的`P`指向的字符串。 2. **成员函数**: - `char* getp()`:返回指向`char`数组的指针,提供访问`P`的途径。 - `void setP(char*d)`:设置`P`指向的字符串,通过`strcpy`函数实现。 3. **重载`operator+()`**: - 此函数的主要目的是将两个`dd`对象连接在一起。首先,它调用了一个名为`dds()`的隐式拷贝构造函数(在这里未给出,可能是为了简化示例),然后使用`strcat`函数将`this`对象和`b`对象的`P`指向的字符串拼接在一起,最后返回一个新的`dd`对象,包含了连接后的字符串。 4. **`main()`函数**: - 通过创建`dd`对象`a`和`b`,分别初始化为空字符串和"CЦЦЦ",展示了如何实例化和使用这个类。 - 对`a`和`b`进行连接操作,结果存储在`ddc`中,然后分别输出三个对象的`getp()`结果,显示连接后的字符串。 总结来说,这篇文档详细地展示了如何在C++中处理一个包含`char*`成员变量的类,通过重载`operator+`来实现字符串的拼接,并且展示了如何在实际程序中创建和操作这些对象。这对于理解和编写处理字符串操作的自定义类来说是十分重要的基础知识。

#include <iostream> #include <cstring> using namespace std; bool input(char &c, int &row); char* print(char* &result, char c, int row); void output(char* result); void test(); bool test(char c, int row, char* exp); int main() { char c; char* result = nullptr; int row; test(); input(c, row); cout << "&result: " << &result << " result: " << result << endl; char* print(char* &result,char c,int row); cout << "&result: " << &result << " result: " << result << endl; output(result); delete [] result; return 0; } bool input(char &c, int &row) { cin >> row >> c; return true; } char* print(char* &result, char c, int row) { cout << "&result: " << &result << " result: " << result << endl; result = new char[100]; int index = 0; for(int i = 0; i < row; i++) { for(int j = 0; j <= i; j++) result[index++] = c; result[index++] = '\n'; } result[index++] = '\0'; cout << "&result: " << &result << " result: " << result << endl; return result; } void output(char* result) { cout << result; } void test() { char exp[] = "\n\n\n*\n**\n*****\n"; if(test('*', 6, exp)) { cout << "1. 6* succeeded!" << endl; } else { cout << "1. 6* failed!" << endl; } } bool test(char c, int row, char* exp) { char* result = nullptr; bool isSucc = true; int resLen = strlen(print(result, c, row)); int expLen = strlen(exp); cout << resLen << " " << expLen << endl; if(resLen != expLen) isSucc = false; else for(int i = 0; i < resLen; i++) { if(exp[i] != result[i]) { isSucc = false; break; } } delete[] result; return isSucc; }把每行代码都翻译一下

2023-06-11 上传