请设计一个OBJ类,使以下程序能正确运行(不能修改) int main() { char s[80]; cin >> s; // 输入"xxxx" OBJ *pobj; pobj = new OBJ(s); // 输出"xxxx object created" pobj->say(); // 输出"I am object xxxx" OBJ c = *pobj; // 输出"xxxx-copy object created" delete pobj; // 输出"xxxx object destroyed" OBJ a("a"); a.say(); OBJ b; b.say(); c.say(); return 0; }
时间: 2024-03-18 19:41:15 浏览: 12
以下是一个简单的OBJ类设计,能够满足上述程序的要求:
```cpp
#include <iostream>
#include <cstring>
using namespace std;
class OBJ {
private:
char *name; // 对象名称
public:
// 构造函数
OBJ(const char *str = "") {
name = new char[strlen(str) + 1];
strcpy(name, str);
cout << name << " object created" << endl;
}
// 拷贝构造函数
OBJ(const OBJ &obj) {
name = new char[strlen(obj.name) + 1];
strcpy(name, obj.name);
cout << name << "-copy object created" << endl;
}
// 析构函数
~OBJ() {
cout << name << " object destroyed" << endl;
delete[] name;
}
// 输出对象信息
void say() {
cout << "I am object " << name << endl;
}
};
```
在主程序中,先使用new运算符创建一个OBJ对象,然后调用其say()方法输出对象信息,再使用拷贝构造函数创建一个OBJ对象,使用delete运算符删除先前创建的对象,然后创建两个新的OBJ对象,并调用其say()方法:
```cpp
int main() {
char s[80];
cin >> s;
OBJ *pobj;
pobj = new OBJ(s);
pobj->say();
OBJ c = *pobj;
delete pobj;
OBJ a("a");
a.say();
OBJ b;
b.say();
c.say();
return 0;
}
```
运行程序后,会依次输出对象创建和销毁的信息,以及对象的信息。注意,需要在析构函数中释放使用new运算符分配的内存空间。