换一种写法,并详细解释每句作用和知识点#include <iostream> #include <cstring> using namespace std; class String { private: char *str; public: String( char *s ) { str = new char[strlen(s) + 1]; strcpy(str, s); } friend String operator+=( String& s1,String & s2) ; void display() { cout << str << endl; } }; String operator+=( String& s1,String & s2) { char *p = new char[strlen(s1.str) + strlen(s2.str) + 1]; strcpy(p, s1.str); strcat(p, s2.str); s1.str = p; return s1.str; } int main() { String s1("software and "); String s2("hardware"); s1+=s2; cout <<"s1:";s1.display(); cout <<"s2:";s2.display(); cout<<"成员函数"<<endl; return 0; }
时间: 2024-01-03 15:04:24 浏览: 378
使用include <iostream>时一定要加using namespace std
这段代码定义了一个名为 `String` 的类,实现了字符串的拼接和输出功能。具体解释如下:
1. `#include<iostream>` 和 `#include<cstring>` 引入了输入输出流和字符串相关的头文件。
2. `using namespace std;` 声明使用 std 命名空间,简化了后面 std 命名空间下的函数和变量的调用。
3. `class String` 定义了一个名为 String 的类。
4. `private:` 声明了一个私有成员变量 `char* str`,表示字符串。
5. `public:` 声明了一个公有构造函数 `String(char* s)`,该函数接受一个 char* 类型的参数 s,将其分配内存并赋值给 str。
6. `friend String operator+=(String& s1, String& s2);` 声明了一个友元函数 `operator+=`,用于实现字符串的拼接。
7. `void display()` 声明了一个成员函数 `display()`,用于输出字符串。
8. `String operator+=(String& s1, String& s2)` 实现了字符串的拼接功能。该函数接受两个 String 类型的参数 s1 和 s2,将它们拼接成一个新的字符串,并将该字符串赋值给 s1.str,最后返回 s1.str。
9. `main()` 函数创建了两个字符串对象 s1 和 s2,并将它们拼接起来,输出结果。注意,该拼接操作是通过调用 `operator+=` 友元函数实现的。
涉及到的知识点包括:
1. 类的定义和成员变量、成员函数的声明和实现。
2. 构造函数的定义和使用。
3. 友元函数的定义和使用。
4. 内存管理,包括动态内存分配和释放。
5. 字符串操作,包括字符串长度计算、字符串复制和拼接。
阅读全文