c++复习巩固!
以下为 myString.h
#ifndef MYSTRING_H_
#define MYSTRING_H_
#include <iostream>
using std::ostream;
using std::istream;
class Ms
{
friend istream &operator>>(istream &ai,Ms &an);
friend ostream &operator<<(ostream &a,const Ms &an);
public:
Ms(const char *na=nullptr);//普通构造
Ms(const Ms &an); //拷贝构造
Ms &operator=(const Ms &an);//返回引用的原因:支持链等,并且链等过程中不会调用拷贝构造函数。
Ms operator +(const Ms &an);//返回值的原因:当a=b+c时,会产生新的对象
//返回值:产生新的对象。 返回引用:支持链等,未产生新对象或更改已有对象的值
Ms &operator +=(const Ms &an);
bool operator>(const Ms &an);
bool operator<(const Ms &an);
bool operator==(const Ms &an);
char at(int n);
char *c_str();
~Ms();
void dis();
private:
char *_str;
};
#endif
以下为myString.cpp
#include <stdlib.h>
#include <string.h>
#include <iostream>
#include "mystring.h"
using std::cout;
istream &operator>>(istream &ai,Ms &an)
{
char p[1024];
ai>>p;
an._str=p;
return ai;
}
ostream &operator<<(ostream &os,const Ms &an)
{
os<<an._str;
return os;
}
Ms::Ms(const char *na)
{
if(nullptr==na)
{
_str=new char[1];
*_str='\0';
}
else
{
int len=strlen(na);
_str=new char[len+1];
strcpy(_str,na);
}
}
void Ms::dis()
{
cout<<_str;
}
Ms::Ms(const Ms &an)
{
int len=strlen(an._str);
_str=new char[len+1];
strcpy(_str,an._str);
}
Ms & Ms::operator=(const Ms &an)
{
if(this->_str==an._str)
{
return *this;
}
delete [] this->_str;
int len=strlen(an._str);
this->_str=new char[len+1];
strcpy(this->_str,an._str);
return *this;
}
Ms Ms::operator +(const Ms &an)
{
Ms temp;
delete [] temp._str;
int lenF=strlen(this->_str);
int lenB=strlen(an._str);
int len=lenB+lenF;
temp._str=new char[len+1]{0};
strcat(strcpy(temp._str,this->_str),an._str);
return temp;
}
Ms & Ms::operator +=(const Ms &an)
{
int lenF=strlen(this->_str);
int lenB=strlen(an._str);
int len=lenB+lenF;
this->_str=static_cast<char*>(realloc(this->_str,len+1));
memset(this->_str+lenF,0,lenB+1);
strcat(this->_str,an._str);
return *this;
}
bool Ms::operator>(const Ms &an)
{
if((strcmp(this->_str,an._str))>0)
return true;
else
return false;
}
bool Ms::operator<(const Ms &an)
{
if((strcmp(this->_str,an._str))<0)
return true;
else
return false;
}
bool Ms::operator==(const Ms &an)
{
if((strcmp(this->_str,an._str))==0)
return true;
else
return false;
}
char Ms::at(int n)
{
return _str[n];
}
char * Ms::c_str()
{
return _str;
}
Ms::~Ms()
{
delete [] _str;
}
以下为main.cpp
#include <iostream>
#include "mystring.h"
using namespace std;
int main()
{
Ms ma("abc"); //构造
cout<<ma<<endl; //<<
Ms mb(ma); //拷贝构造
cout<<mb<<endl;
Ms mc="def";
Ms md;
md=mc=ma; //==
cout<<md<<endl;
cout<<endl;
Ms na="abc";
Ms nb="def";
na+=nb; //+=
cout<<na<<endl;
Ms nc;
nc=na+nb; //+
cout<<nc<<endl;
cout<<endl;
char *p=nullptr;
Ms ms ="han";
p=ms.c_str();
cout<<p<<endl;
cout<<endl;
Ms ca;
cin>>ca; //>>
cout<<ca<<endl;
return 0;
}
测试结果: