#include <iostream>
#include <string.h>
using namespace std;
class MyString
{
private:
char *str; //记录C风格的字符串
int size; //记录字符串的实际长度
public:
//无参构造
MyString():size(10)
{
str=new char[size]; //构造出一个长度为10的字符串
strcpy(str,""); //赋值为空串
}
//有参构造
MyString(const char *s)
{
size=strlen(s);
str=new char[size+1];
strcpy(str,s);
}
//拷贝构造
MyString(const MyString &other):str(new char(*other.str)),size(other.size)
{
strcpy(this->str,other.str);
cout<<"拷贝构造函数"<<endl;
}
//析构函数
~MyString()
{
delete str; //释放成员指针的空间
cout<<"析构函数"<<this<<endl;
}
//拷贝赋值函数
MyString &operator=(const MyString &other)
{
if(this!=&other)
{
this->size=other.size;
//判断原来指针空间释放被清空
if(this->str!=NULL)
{
delete this->str;
}
this->str=new char(*other.str);
}
strcpy(this->str,other.str);
cout<<"拷贝赋值函数"<<endl;
return *this;
}
//判空函数
bool str_empty()
{
if(size==0)
{
return true;
}
return false;
}
//size函数
int str_size()
{
cout<<"size为:"<<size<<endl;
return 1;
}
//c_str函数
string my_c_str()
{
char r1[20];
string r2=str;
strcpy(r1,r2.c_str());
cout<<"r1="<<r1<<endl;
return r2;
}
//at函数
char &at(int pos)
{
cout<<str[pos]<<endl;
return str[pos];
}
//加号运算符重载
const MyString operator+(const MyString &R)const
{
//定义一个临时空间
MyString m;
m.size=this->size+R.size;
m.str=strcat(this->str,R.str);
return m;
}
//加等于运算符重载
MyString &operator+=(const MyString &R)
{
this->size+=R.size;
this->str=strcat(this->str,R.str);
return *this;
}
//关系运算符重载(>)
bool operator>(const MyString &R)const
{
if(strcmp(this->str,R.str)>0)
{
return true;
}
return false;
}
//中括号运算符重载
char &operator[](int index)
{
return this->str[index];
}
//定义展示函数
void show()
{
cout<<str<<endl;
}
};
int main()
{
MyString s1("hello");
MyString s2("world");
//调用at函数
s1.at(4);
//调用加法运算符重载函数
MyString s3=s1+s2;
//调用加等于运算符重载函数
s1+=s2;
//调用关系运算符重载函数
if(s1>s2)
{
cout<<"yes"<<endl;
}
else
{
cout<<"no"<<endl;
}
//调用中括号运算符重载
s2[2]='o';
s2.show();
//调用拷贝构造
MyString s4=s2;
s4.show();
//调用拷贝赋值函数
MyString s5; //调用无参构造
cout<<s5.str_empty()<<endl; //调用判空函数
s5=s1;
s5.show();
//调用size函数
s1.str_size();
//调用c_str函数
s2.my_c_str();
return 0;
}
C++-day4作业
最新推荐文章于 2024-10-07 19:01:55 发布