64,688
社区成员
发帖
与我相关
我的任务
分享
#include <iostream>
#include <string.h>
using namespace std;
class String
{
private:
char *ptr;
public:
String();
String(char *s);
String(const String &src);
~String();
String& operator = (const String &src)
{
cpy(src.ptr); return *this;
}
String& operator = (char *s)
{
cpy(s); return *this;
}
String operator + (char *s);
int operator == (const String &other);
operator char*() {return ptr;}
void cat(char *s);
void cpy(char *s);
};
int main()
{
String a,b,c;
a = "I";
b = "am";
c = "so";
String d = a + b + c + "very happpy!\n";
cout <<d;
return 0;
}
//---------------------------------------
//String 类的成员函数
String::String()
{
ptr = new char[];
ptr[0] = '\0';
}
String::String(char *s)
{
int n = strlen(s);
ptr = new char[n+1];
strcpy(ptr,s);
}
String::String(const String &src)
{
int n = strlen(src.ptr);
ptr = new char[n+1];
strcpy(ptr,src.ptr);
}
String::~String()
{
delete [] ptr;
}
int String::operator == (const String &other)
{
return (strcmp(ptr,other.ptr) == 0);
}
String String::operator + (char *s)
{
String new_str(ptr);
new_str.cat(s);
return new_str;
}
//cpy函数--用于拷贝字符串
//
void String::cpy(char *s)
{
delete [] ptr;
int n = strlen(s);
ptr = new char[n+1];
strcpy(ptr,s);
}
//cat函数--用于连接字符串
//
void String::cat(char *s)
{
//为新的字符串数据分配足够的空间
int n = strlen(ptr) + strlen(s);
char *p1 = new char[n+1];
//将数据拷贝到新的内存块
strcpy(p1,ptr);
strcat(p1,s);
//回收旧的内存快,并更新ptr
delete [] ptr;
ptr = p1;
}
错误信息已经告诉你啦
String::String()
{
ptr = new char[]; //没有这种用法直接ptr=new char;
ptr[0] = '\0';
}