#include <iostream>
#include <string.h>
using namespace std;
class String
{
public:
explicit String(const char *str = ""); //关键字explicit表明只能进行显示转换
explicit String(const String &other);
String& operator=(const String &assign);
~String() {delete[] m_data;}
operator char*() { return m_data;} //类型转换函数,注意的是只能是非静态成员函数
private:
char *m_data;
};
String::String(const char *str) //默认实参只能在写在声明处,否则编译不通过
{
if (str == NULL)
{
m_data = new char[1];
*m_data = '/0';
}
else
{
m_data = new char[strlen(str)+1];
strcpy(m_data,str);
}
}
String::String(const String &other)
{
m_data = new char[strlen(other.m_data)+1];
strcpy(m_data,other.m_data);
}
String& String::operator=(const String &assign)
{
if (this != &assign)
{
delete[] m_data;
char *temp = new char[strlen(assign.m_data)+1];
strcpy(temp,assign.m_data);
m_data = temp;
}
return *this;
}
int main()
{
String s("hello");
String s1(s);
String *s2 = new String("world");
String s3(*s2);
cout << s << endl;
cout << s1 << endl;
cout << *s2 << endl;
cout << s3 << endl;
}
c++ 字符串包装类String
最新推荐文章于 2022-11-22 23:15:22 发布