class String {
char * pt;
public:
String() {};
~String() {};
String(char * str);
String(const String& s);
String& operator=(const String& s);
void add(const String& s); // 表示将s加到当前字符串中
// 表示构造一个新字符串,内容为前字符串加上s,并返回该字符串对象
String add(const String& s) const;
void print() const;
};
int main() {
String s1;
String s2("hello");
s1 = s2; // 表示将s2赋值给s1
s1.print();
String s3(" world");
s1.add(s3); // 表示将s3加到s1中
s1.print();
const String s4(s2);
String s5;
s5 = s4.add(s3); // 表示将s4加上s3赋值给s5中
s5.print();
}
void add(const String& s);
和
String add(const String& s) const;
参数一样,不能构成重载,两个必须二选一,假设你采用下面的,放弃上面的
String String::add(const String& s) const
{
char * p = new char[strlen(pt) + strlen(s.pt) + 1];
strcpy(p, pt);
strcat(p, s.pt);
String r(p);
return r;
}
另外你还得完善下拷贝构造函数和默认的构造函数