#include <iostream> #include <typeinfo> #include <string> #include <iomanip> using namespace std; class Simple { public: int s; public: Simple(){} setMem(int s_=0):s(s_){return s;} getMem(){return s;} Simple(Simple&s_):s(s_){} void print(){cout<<"Simple "<<s<<" is created."<<endl;} ~print(){cout<<"Simple "<<s<<" is erased."<<endl;} }; int main() { int m; cin>>m; Simple s1, s2(m); Simple s3; s3.setMem(m).print(); s3.setMem(m+1); cout<<s3.getMem()<<endl; Simple s4(s3); s4.print(); return 0; }请修改至正确
时间: 2024-03-26 20:39:04 浏览: 69
使用include <iostream>时一定要加using namespace std
好的,我来帮你修改代码。
这里有几个问题需要修正:
1. 在类定义中,构造函数和析构函数的声明应该以`~`和类名开头。
2. `setMem`函数没有指定返回类型。
3. `setMem`函数的实现中,应该返回当前对象,而不是`s`的值。
4. `getMem`函数没有指定返回类型。
5. 构造函数和拷贝构造函数中,应该使用初始化列表初始化数据成员。
以下是修改后的代码:
```c++
#include <iostream>
#include <string>
using namespace std;
class Simple {
public:
int s;
public:
Simple():s(0){} // 默认构造函数
Simple(int s_):s(s_){} // 带参数构造函数
Simple(const Simple& s_):s(s_.s){} // 拷贝构造函数
~Simple(){cout<<"Simple "<<s<<" is erased."<<endl;} // 析构函数
Simple& setMem(int s_){s=s_; return *this;} // 设置数据成员的值,并返回当前对象
int getMem() const {return s;} // 返回数据成员的值
void print() const {cout<<"Simple "<<s<<" is created."<<endl;} // 输出数据成员的值
};
int main() {
int m;
cin>>m;
Simple s1, s2(m);
Simple s3;
s3.setMem(m).print();
s3.setMem(m+1);
cout<<s3.getMem()<<endl;
Simple s4(s3);
s4.print();
return 0;
}
```
在修改后的代码中,我们使用了初始化列表来初始化数据成员,同时修正了函数的返回类型和实现。现在我们可以成功编译并运行程序。
阅读全文