#include <iostream>
#include <cstring>
#include <cstdio>
class MYstring
{
public:
//无参构造函数
MYstring()
{
std::cout << "无参构造函数" << std::endl;
ptr = nullptr ;
len = 0;
}
//有参构造函数
MYstring(const char *s)
{
std::cout << "有参构造函数" << std::endl;
len = strlen(s);
ptr = (new char[len]);
strcpy(ptr,s);
}
//析构函数
~MYstring()
{
std::cout << "析构造函数" << std::endl;
if(nullptr != ptr)
{
delete []ptr;
}
}
//拷贝构造函数
MYstring(const MYstring &str):len(str.len),ptr(new char[len])
{
std::cout << "拷贝构造函数" << std::endl;
strcpy(ptr,str.ptr);
}
//拷贝赋值函数
MYstring& operator=(const MYstring &N)
{
if(nullptr != this)
{
len = N.len;
if(nullptr != ptr)
{
ptr = new char[len];
}
strcpy(ptr,N.ptr);
}
std::cout << "拷贝赋值函数" << std::endl;
return *this;
}
//data
const char *data()
{
return ptr;
}
//size
size_t size()
{
return len;
}
//empty
bool empty()
{
if(len == 0)
{
return true;
}else
{
return false;
}
}
//at
char at(size_t index)
{
char ch = *(ptr+index-1);
if(0>index || index >(len-1))
{
std::cout << "out_of_range" << std::endl;
}else
{
return ch;
}
}
private:
char *ptr;
int len;
};
int main(int argc, const char *argv[])
{
MYstring T1("asdf");
std::cout << T1.data() << std::endl;//data()函数返回指向自己的第一个字符的指针
std::cout << T1.size() << std::endl;//size()函数返回字符串中现在拥有的字符数
std::cout << std::boolalpha << T1.empty() << std::endl;//如果字符串为空则empty()返回真(true),否则返回假(false)
std::cout << T1.at(3) << std::endl;//at(J)函数返回一个引用,指向在index位置的字符.
//如果index不在字符串范围内, at()将报告"out of range"错误,
//并抛出out_of_range异常
return 0;
}