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测试代码 | 栈-基础代码积累 下一篇»

发表评论 »本文目前尚无任何评论

发表评论

干净网络从你做起,切勿黏贴小广告