C++沉思录-基础例程
作者:Lew's Personal Blog 发布于:2019-12-17 14:43 Tuesday 分类:C/C++
#include <iostream>using namespace std;
class String
{
public:
String();
String(const char *s);
String& operator=(const String& s);
~String(){}
void display();
private:
char *data;
};
String::String(const char *s)
{
//这里注意细节
data = new char[strlen(s) + 1];
strcpy_s(data, strlen(s) + 1, s);
}
//String& String::operator=(const String& s)//这种方式不安全
//{ //没有注意s与this可能指向同一片内存
// delete[] data;
// data = new char[strlen(s.data) + 1];
// strcpy(data, s.data);
// return *this;
//}
//可行方法1
//String& String::operator=(const String& s)
//{
// if (&s != this)
// {
// delete[] data;
// data = new char[strlen(s.data) + 1];
// strcpy(data, s.data);
// }
// return *this;
//}
String& String::operator=(const String& s)
{
char* newdata = new char[strlen(s.data) + 1];
strcpy(newdata, s.data);
delete[] data;
data = newdata;
return *this;
}
void String::display()
{
cout << "data:" << data << endl;
}
int main(int argc, char **argv)
{
String s1("hello");
cout << "打印原始s1" << endl;
s1.display();
s1.operator=("world");
cout << "打印赋值语句" << endl;
s1.display();
return 0;
}
标签: 重载
« 上一篇 leetcode测试代码 | 栈-基础代码积累 下一篇»