面试题中的疑难杂症
自定义一个string类型,要求有合理的构造函数,拷贝构造方法、析构函数,赋值运算符重载,输出方法;
class String{
private:
char *m_data; //用于保存字符串
public:
String(const char *str = 0); //构造函数
String(const String& rhs); //拷贝构造函数
~String(); //析构函数
String& operator=(const String& rhs);//赋值运算符
const char* data() const; //输出函数
};
构造函数
String::String(const char* str){
if(NULL == str){
m_data = new char[1];
*m_data = '\0';
}else{
int length = strlen(str);
m_data = new char[length + 1];
strcpy(m_data, str);
}
}
拷贝构造函数
String::String(const String& rhs){
int length = strlen(rhs.m_data);
m_data = new char[length + 1];
strcpy(m_data,rhs.m_data);
}
析构函数
String::~String(){
//m_data 是类的内部成员,所以也可以写成delete m_data;
delete [] m_data;
}
赋值运算符
String& String::operator = (const String& rhs){
//检查自赋值,如果相同,直接返回
if(this == &rhs){
return *this;
}
//删除原空间
delete [] m_data;
//再申请新空间,并赋值
int length = strlen(rhs.m_data);
m_data = new char[length + 1];
strcpy(m_data, rhs.data);
//返回本对象的引用
return *this;
}
输出函数
const char* data() const{
return *this;
}