这里有个完整版:http://hi.baidu.com/_%E2d_%B7%B3_%DE%B2%C2%D2/blog/item/efbfdd18e53108b14aedbc9c.html
#include
using namespace std;
class String{
friend ostream& operator<< (ostream&,String&);
public:
String(const char* str=NULL); //赋值构造兼默认构造函数(char)
String(const String &other); //赋值构造函数(String)
String& operator=(const String&other); //operator=
String operator+(const String &other)const; //operator+
bool operator==(const String&); //operator==
char& operator[](unsigned int); //operator[]
size_t size(){return strlen(m_data);};
~String(void) {delete[] m_data;}
private:
char *m_data;
};
inline String::String(const char* str)
{
if (!str) m_data=0;
else
{
m_data = new char[strlen(str)+1];
strcpy(m_data,str);
}
}
inline String::String(const String& other)
{
if(!other.m_data) m_data=0;
else
{
m_data=new char[strlen(other.m_data)+1];
strcpy(m_data,other.m_data);
}
}
inline String& String::operator=(const String& other)
{
if (this!=&other)
{
delete[] m_data;
if(!other.m_data) m_data=0;
else
{
m_data = new char[strlen(other.m_data)+1];
strcpy(m_data,other.m_data);
}
}
return *this;
}
inline String String::operator+(const String &other)const
{
String newString;
if(!other.m_data)
newString = *this;
else if(!m_data)
newString = other;
else
{
newString.m_data = new char[strlen(m_data)+strlen(other.m_data)+1];
strcpy(newString.m_data,m_data);
strcat(newString.m_data,other.m_data);
}
return newString;
}
inline bool String::operator==(const String &s)
{
if ( strlen(s.m_data) != strlen(m_data) )
return false;
return strcmp(m_data,s.m_data)?false:true;
}
inline char& String::operator[](unsigned int e)
{
if (e>=0&&e<=strlen(m_data))
return m_data[e];
}
ostream& operator<<(ostream& os,String& str)
{
os << str.m_data;
return os;
}
void main()
{
String str1="Hello!";
String str2="Teacher!";
String str3 = str1+str2;
cout<
}
下面是你要的四个函数,标准答案日后补上,这是笔试题吧。
String::String(const char*str=NULL){
assert(str==NULL);
int slen=strlen(str);
m_data=new char(slen+1);
m_data[slen]='\0';
strcpy(m_data,str);
}
String::String(const String &other){
assert(other.m_data==NULL);
int slen=strlen(other.m_data);
this.m_data=new char(slen+1);
this.m_data[slen]='\0';
strcpy(m_data,other.m_data);
}
String::~String(void){
if(m_data!=NULL)
delete m_data;
}
String::String & operate=(const String &other){
assert(other.m_data==NULL);
int slen=strlen(other.m_data);
this.m_data=new char(slen+1);
this.m_data[slen]='\0';
strcpy(m_data,other.m_data);
}
希望可以帮到你~
推荐你看看林锐的 高效C++编程,上面有对此题的解析
竟然找答案,小心被告发,百度不允许求答案的。