覆盖类中原有的的构造函数和新增功能函数:
#include <iostream>
using namespace std;
class my_string
{
private:
char *str;
int len;
public:
//无参构造
my_string(){
len = 15;
str = new char[len];
cout<<"无参构造"<<endl;
}
//有参构造
my_string(char *p)
{
char *tra = p;
int count = 0;
while(*tra != '\0')
{
tra++;
count++;
}
len = count;
str = new char[count+1]; // 字符串以'\0'结尾
for(int i=0; i<count+1; i++)
{
*(str+i) = *(p+i);
}
cout<<"有参构造"<<endl;
}
//拷贝构造
my_string(const my_string &other)
{
str = new char[len]; //已经构造过,不需要再初始化len
for(int i=0; i<len+1; i++)
{
*(this->str+i) = *(other.str+i);
}
cout<<"拷贝构造"<<endl;
}
//拷贝赋值
my_string &operator=(const my_string &other)
{
this->len = other.len;
this->str = new char[len];
for(int i=0; i<this->len+1; i++)
{
*(this->str+i) = *(other.str+i);
}
cout<<"赋值拷贝构造"<<endl;
return *this;
}
//析构函数
~my_string()
{
delete str;
str = NULL;
cout<<"析构函数"<<endl;
}
//判空
bool empty()
{
return len == 0?1:0;
}
//求总长度
int size()
{
return len;
}
//at()
char &at(int pos)
{
return *(str+pos);
}
//转c风格字符串函数
char *c_str()
{
return str;
};
};
int main()
{
my_string s1; // 无参构造
my_string s2("aaa bbb!"); // 有参构造
my_string s3(s2); // 拷贝构造
my_string s4;
s4 = s2; // 赋值拷贝构造
cout<<"size:"<<s2.size()<<endl;
cout<<"at:"<<s2.at(4)<<endl;
cout<<"empty:"<<s2.empty()<<endl;
cout<<s2.c_str()<<endl;
cout << "Hello World!" << endl;
return 0;
}
测试结果: