#include <iostream>
#include <string>
#include <cstring>
using namespace std;
class Mstring{
public:
char *p;
Mstring();
Mstring(char *q);
~Mstring();
Mstring(const Mstring &mstr);
Mstring& operator=(const Mstring &mstr);
Mstring(int num,const char ch);
char operator[](int index);
void m_size();
Mstring& operator+(Mstring &mstr);
friend ostream& operator<<(ostream &os, Mstring &mstr);
};
Mstring::Mstring(){ //无参构造器
cout << "Mstring()" <<endl;
p = new char[128];
memset(p,0,128);
}
Mstring::Mstring(char *q){ //有参构造器
cout << "Mstring(char *q)" <<endl;
p = new char[128];
memset(p,0,128);
strcpy(p,q);
}
Mstring::~Mstring(){ //析构器
}
Mstring::Mstring(const Mstring &mstr){ //复制构造器
cout << "Mstring& Mstring(const Mstring &mstr)" <<endl;
p = new char[128];
strcpy(p,mstr.p);
}
Mstring::Mstring(int num,char ch) //重载构造器
{
cout << " Mstring(int num,const char ch)" <<endl;
p = new char[128];
memset(p,0,128);
memset(p,ch,num);
}
Mstring& Mstring:: operator=(const Mstring &mstr) //赋值构造器
{
cout << " Mstring& operator=(const Mstring &mstr)" <<endl;
strcpy(p,mstr.p);
return *this;
}
ostream& operator<<(ostream &os, Mstring &mstr) //输出运算符<<重载
{
cout << " ostream& operator<<(ostream &os,Mstring &mstr)" <<endl;
os << mstr.p ;
}
char Mstring::operator[](int index) //[]运算符重载
{
cout << "char Mstring::operator[](int index)" <<endl;
return p[index];
}
void Mstring:: m_size() //求字符串长度的方法
{
int size;
size = strlen(p);
cout << "size = " << size << endl;
}
Mstring& Mstring::operator+(Mstring &mstr) //+运算符重载
{
strcat(p,mstr.p);
return *this;
}
int main()
{
Mstring mstr = "hello"; //调用的是有参构造器
Mstring mstr0; //调用的是无参构造器
mstr0 = mstr; //调用的是赋值构造器
Mstring mstr1(mstr); //调用的是复制构造器
Mstring mstr2("hello"); //调用的是有参构造器
Mstring mstr3 (10,'a'); //调用的是重载构造器
cout << mstr3[1] << endl; //调用的是[]运算符重载
mstr3.m_size( ); //调用的是求字符串长度的方法
// str3[1] = 'l';
Mstring mstr5; //调用的是有参构造器
mstr5 = mstr + mstr3; //调用的是+运算符重载
cout << mstr << endl; //调用的是<<运算符重载
cout << mstr0 << endl;
cout << mstr1 << endl;
cout << mstr2<< endl;
cout << mstr3<< endl;
cout << mstr5<< endl;
return 0;
}
#include <string>
#include <cstring>
using namespace std;
class Mstring{
public:
char *p;
Mstring();
Mstring(char *q);
~Mstring();
Mstring(const Mstring &mstr);
Mstring& operator=(const Mstring &mstr);
Mstring(int num,const char ch);
char operator[](int index);
void m_size();
Mstring& operator+(Mstring &mstr);
friend ostream& operator<<(ostream &os, Mstring &mstr);
};
Mstring::Mstring(){ //无参构造器
cout << "Mstring()" <<endl;
p = new char[128];
memset(p,0,128);
}
Mstring::Mstring(char *q){ //有参构造器
cout << "Mstring(char *q)" <<endl;
p = new char[128];
memset(p,0,128);
strcpy(p,q);
}
Mstring::~Mstring(){ //析构器
}
Mstring::Mstring(const Mstring &mstr){ //复制构造器
cout << "Mstring& Mstring(const Mstring &mstr)" <<endl;
p = new char[128];
strcpy(p,mstr.p);
}
Mstring::Mstring(int num,char ch) //重载构造器
{
cout << " Mstring(int num,const char ch)" <<endl;
p = new char[128];
memset(p,0,128);
memset(p,ch,num);
}
Mstring& Mstring:: operator=(const Mstring &mstr) //赋值构造器
{
cout << " Mstring& operator=(const Mstring &mstr)" <<endl;
strcpy(p,mstr.p);
return *this;
}
ostream& operator<<(ostream &os, Mstring &mstr) //输出运算符<<重载
{
cout << " ostream& operator<<(ostream &os,Mstring &mstr)" <<endl;
os << mstr.p ;
}
char Mstring::operator[](int index) //[]运算符重载
{
cout << "char Mstring::operator[](int index)" <<endl;
return p[index];
}
void Mstring:: m_size() //求字符串长度的方法
{
int size;
size = strlen(p);
cout << "size = " << size << endl;
}
Mstring& Mstring::operator+(Mstring &mstr) //+运算符重载
{
strcat(p,mstr.p);
return *this;
}
int main()
{
Mstring mstr = "hello"; //调用的是有参构造器
Mstring mstr0; //调用的是无参构造器
mstr0 = mstr; //调用的是赋值构造器
Mstring mstr1(mstr); //调用的是复制构造器
Mstring mstr2("hello"); //调用的是有参构造器
Mstring mstr3 (10,'a'); //调用的是重载构造器
cout << mstr3[1] << endl; //调用的是[]运算符重载
mstr3.m_size( ); //调用的是求字符串长度的方法
// str3[1] = 'l';
Mstring mstr5; //调用的是有参构造器
mstr5 = mstr + mstr3; //调用的是+运算符重载
cout << mstr << endl; //调用的是<<运算符重载
cout << mstr0 << endl;
cout << mstr1 << endl;
cout << mstr2<< endl;
cout << mstr3<< endl;
cout << mstr5<< endl;
return 0;
}