#include <iostream>
using namespace std;
class MyString{
private:
char *str;
int len;
public:
MyString();
MyString(const char *s);
MyString(const MyString &);
~MyString();
int length(){return len;}
MyString &operator =(const MyString &);
MyString &operator =(const char *);
friend ostream &operator <<(ostream &os,const MyString &st);
friend istream &operator >>(istream &is,MyString &st);
};
头文件定义如上所示: 定义最基本的一些操作,构造函数、复制构造函数、析构函数、赋值操作等。
#include "MyString.h"
#include <string>
#include <iostream>
using namespace std;
MyString::MyString()
{
len=1;
str=new char[1];
str[0]='\0';
}
MyString ::MyString(const char *s)
{
len=strlen(s);
str=new char[len+1];
strcpy(str,s);
cout<<"类C的构造函数被调用"<<endl;
}
MyString ::MyString(const MyString &s)
{
len=s.len;
str=new char[len+1];
strcpy(str,s.str);
cout<<"复制构造函数被调用"<<endl;
}
MyString::~MyString()
{
delete []str;
cout<<"析构函数被调用"<<endl;
}
MyString & MyString::operator=(const MyString &s )
{
if (this==&s)
{
return *this;
}
delete []str;
len=s.len;
str=new char[len+1];
strcpy(str,s.str);
cout<<"赋值操作被调用"<<endl;
return *this;
}
MyString & MyString::operator=(const char *s)
{
delete []str;
len=strlen(s);
str=new char[len+1];
strcpy(str,s);
cout<<"类C的赋值操作被调用"<<endl;
return *this;
}
ostream &operator <<(ostream &os,const MyString &st)
{
os<<st.str;
return os;
}
MyString 类的具体方法实现过程,注意其中内存操作部分是关键。
下面是操作这个类的测试代码
#include "MyString.h"
int main()
{
MyString str="hello world";
MyString str2="love you";
MyString str1=str;
str1=str2;
str2="saisai";
cout<<str<<endl;
cout<<str1<<endl;
cout<<str2<<endl;
return 0;
}