#include<iostream>
using namespace std;
class mystr
{
friend ostream& operator <<(ostream& out, const mystr& str)//友元函数必须在类内部定义,重载cout
{
return str.print(out);
}
private:
char* _data;
ostream& print(ostream& out) const;
public:
mystr(const char *str = 0);//普通构造函数
mystr(const mystr& other);//拷贝构造函数
mystr& operator=(const mystr& other);//赋值构造函数
char* data(void) const { return _data; }//封装成员变量
~mystr(void);//析构函数
};
ostream& mystr::print(ostream& out) const//为了重载cout 被友元函数调用
{
out << _data;
return out;
}
mystr::mystr(const char* str)
{
if (str == NULL)
{
_data = new char[1];
*_data = '\0';
}
else
{
size_t len = strlen(str);
_data = new char[len + 1];
strcpy_s(_data, len + 1, str);
}
}
mystr::mystr(const mystr& other)
{
size_t len = strlen(other.data());
_data = new char[len + 1];
strcpy_s(_data, len + 1, other.data());
}
mystr& mystr::operator=(const mystr& other)
{
if (&other == this) return *this;
delete[] _data;
size_t len = strlen(other.data());
_data = new char[len + 1];
strcpy_s(_data, len + 1, other.data());
}
mystr::~mystr(void)
{
delete[] _data;
}
int main()
{
const char* p = "hello world";
mystr s1(p);
mystr s2;
s2 = s1;
cout << s1 << endl << s2 << endl;
}
自定义的string类(熟悉构造拷贝赋值)
最新推荐文章于 2023-10-28 15:48:57 发布