C++填空题,运算结果为Welcome!

运算结果为Welcome!,请填空完成。
#include < iostream>
using namespace std;
class ChangeStr{
private:char *s;
public:
void set(char *str){
str = new char[strlen(s)+1];
strcpy(str, s);
}
ChangeStr& _____填空_______ {
delete str;
set(a.str);
return *this;
}
void show(){
cout<<str<<endl;
}
ChangeStr(char *a){
set(a);
}
~ChangeStr(){
delete str;
}
};
int main(){
ChangeStr s1("Welcome!"), s2("Hello!");
_____填空_______
s2.show();
return 1;
}

ChangeStr& set(ChangeStr a){

s2.set(s1);

严格来说,你的题目程序根本就不对,没办法在仅仅填空的情况下运行起来。

正确的完整的程序:

#include <iostream>
#include <string.h>

using namespace std;
class ChangeStr{
private:char *str; //特别是这里2处
public:
void set(char *s){
str = new char[strlen(s)+1]; //特别是这里2处
strcpy(str, s);
}
ChangeStr& set(ChangeStr a) {
delete str;
set(a.str);
return *this;
}
void show(){
cout<<str<<endl;
}
ChangeStr(char *a){
set(a);
}
~ChangeStr(){
delete str;
}
};
int main(){
ChangeStr s1((char *)"Welcome!"), s2((char *)"Hello!");
s2.set(s1);
s2.show();
return 1;
}

问题解决的话,请采纳

楼上正解,,这个程序确实有问题,,s2.set(s1);后 s1 的指针就成野指针了