C++练习 | 运算符重载练习(字符串相关)
#include <iostream> #include <cmath> #include <cstring> #include <string> #include <iomanip> using namespace std; class String { private: char *s; public: String() { s=new char[1000]; } String(const char *t) { s=new char[1000]; strcpy(s,t); } String(const String &t) { s=new char[1000]; strcpy(s,t.s); } ~String() { delete []s; } String & operator=(const char *t) { strcpy(this->s,t); return *this; } String & operator=(const String &t) { this->s=t.s; return *this; } String operator+(const char *t) { char *t1=nullptr; strcpy(t1,this->s); strcat(t1,t); return t1; } String operator+(const String &t) { char *t1 = nullptr; strcpy(t1,this->s); strcat(t1,t.s); return t1; } String & operator+=(const char *t) { strcat(this->s,t); return *this; } String & operator+=(const String &t) { strcat(this->s,t.s); return *this; } friend istream & operator>>(istream & is, String &t1) { is>>t1.s; return is; } friend ostream & operator<<(ostream & os, String &t2) { os<<t2.s; return os; } friend bool operator==(const String &t1, const char *t2) { if(strcmp(t1.s,t2)) return 0; else return 1; } friend bool operator==(const String &t1, const String &t2) { if(strcmp(t1.s,t2.s)) return 0; else return 1; } friend bool operator!=(const String &t1, const char *t2) { return strcmp(t1.s,t2); } friend bool operator!=(const String &t1, const String &t2) { return strcmp(t1.s,t2.s); } }; int main() { String s; s += "hello"; cout<<s<<endl; String s1("String1"); String s2("copy of "); s2 += "String1"; cout << s1 << "\n" << s2 << endl; String s3; cin >> s3; cout << s3 << endl; String s4("String4"), s5(s4); cout << (s5 == s4) << endl; cout << (s5 != s4) << endl; String s6("End of "), s7("my string."); s6 += s7; cout << s6 << endl; return 0; }