实现以下String类并测试这个类。
class String { private: char * s; public: String(); String(const char *); String(const String &); ~String(); String & operator=(const char *); String & operator=(const String &); String operator+(const char *); String operator+(const String &); String & operator+=(const char *); String & operator+=(const String &); friend istream & operator>>(istream &, String &); friend ostream & operator<<(ostream &, const String &); friend bool operator==(const String &, const char *); friend bool operator==(const String &, const String &); friend bool operator!=(const String &, const char *); friend bool operator!=(const String &, const String &); };
使用以下的main函数进行测试:
int main() { String s; s += "hello"; cout<> 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; }
输入
s3的值
一连串String类的字符串,详见样例
输入样例 1
String3
输出样例 1
hello String1 copy of String1 String3 1 0 End of my string.
#include#include using namespace std; #include #include using namespace std; class String { private: char * s; public: String()//空构造函数 { s=new char[1]; s[0]=''; //!!! }; String(const char *a)//构造函数 { int length=strlen(a); s=new char[length+1]; strcpy(s,a); }; String(const String &a)//拷贝构造函数 { int length=strlen(a.s); this->s=new char[length+1]; strcpy(this->s,a.s); }; ~String() { delete [] s; }; String & operator=(const char *a) { delete [] s; s=new char[strlen(a)+1]; strcpy(this->s, a); return *this; }; String & operator=(const String &a) { delete [] s; s=new char[strlen(a.s)+1]; strcpy(this->s, a.s); return *this; }; String operator+(const char *a)//为什么不能用*this.s { String t; delete[] t.s; // t=*this; int length=strlen(s)+strlen(a); t.s=new char[length+1]; strcpy(t.s,s); strcat(t.s,a); return t; }; String operator+(const String &a) { String t; delete[] t.s; // t=*this; int length=strlen(s)+strlen(a.s); t.s=new char[length+1]; strcpy(t.s,s); strcat(t.s,a.s); return t; }; String & operator+=(const char *a) { // String t(a); *this=*this+a; return *this; }; String & operator+=(const String &a) { *this=*this+a; return *this; }; friend istream & operator>>(istream &is, String &a) { char temp[255]; is >> temp; a = temp; return is; }; friend ostream & operator<<(ostream &os, const String &a) { os<
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)