代码改错#include <iostream> using namespace std; class String { char* ptr; public: String(const char* s = " ") { ptr = new char[strlen(s) + 1]; strcpy_s(ptr, strlen(s) + 1, s); } ~String() { delete[]ptr; } void print() { cout << ptr << endl; } friend ostream& operator << (ostream& out, String& s); friend String& operator +=(String& ls, String& rs); }; String& operator +=(String& ls, String& rs) { char* a = ls.ptr; ls.ptr = new char[strlen(ls.ptr) + strlen(rs.ptr) + 1]; strcpy_s(ls.ptr, strlen(a) + 1, a); strcat_s(ls.ptr,strlen(rs.ptr) + 1, rs.ptr); return ls; } ostream& operator << (ostream& out, String& s) { out << s.ptr << endl; return out; } int main() { String p1("book"), p2("pen"), p3("good"), p4; p4 = p4 = p1; p3 = p1 = p2; cout << "p2:"; p2.print(); cout << "p1:" << p1; cout << "p3:" << p3; p4 += p3; cout << "p4:" << p4; return 0; }
时间: 2024-04-02 15:37:57 浏览: 71
使用include <iostream>时一定要加using namespace std
代码存在以下问题:
1. 在头文件中没有包含cstring头文件,导致使用strlen和strcpy_s函数时编译器无法识别。应该在头文件中加入#include<cstring>。
2. 在operator<<函数中,没有将输出流对象out作为引用传递,应该将函数声明中的String&改为String&。
3. 在operator+=函数中,没有对原有的char*指针进行释放,会导致内存泄漏。应该在ls.ptr = new char[strlen(ls.ptr) + strlen(rs.ptr) + 1];之前加入delete[] ls.ptr;语句。
修改后的代码如下:
阅读全文