#include<iostream> using namespace std; #include<string> class A{ public: A(string x){ name(x); } static A * GetObject(string nname){ if(p==NULL){ p=(new A(nname)); } return p; } void Print(); private: string name; static A p; }; A A::p=NULL; void A::Print(){ cout<<name<<endl; } int main() { string name1,name2; cin >> name1; cin >> name2; A* o1 = A::GetObject(name1); o1->Print(); A* o2 = A::GetObject(name2); o2->Print(); if (o1 == o2) { cout << "o1与o2指向的是同一个对象!" << endl; } delete o1; return 0; }错在哪里
时间: 2024-01-14 22:04:17 浏览: 63
使用include <iostream>时一定要加using namespace std
这段代码有几个问题。第一个问题是在类A中,`A p`应该是一个指向A对象的指针,而不是一个A对象。因此,应该将其声明为`static A* p`。第二个问题是在类A的构造函数中,`name(x)`应该改为`this->name=x`,以便正确地将参数值分配给类成员变量name。第三个问题是在类A的GetObject方法中,应该将静态成员变量p初始化为`NULL`,而不是`A p=NULL`。最后一个问题是在main函数中,应该使用`delete`关键字释放o2指向的对象,而不是o1,因为o1和o2指向的是同一个对象。以下是修复后的代码:
```
#include <iostream>
#include <string>
using namespace std;
class A {
public:
A(string x) {
this->name = x;
}
static A* GetObject(string nname) {
if (p == NULL) {
p = new A(nname);
}
return p;
}
void Print();
private:
string name;
static A* p;
};
A* A::p = NULL;
void A::Print() {
cout << name << endl;
}
int main() {
string name1, name2;
cin >> name1;
cin >> name2;
A* o1 = A::GetObject(name1);
o1->Print();
A* o2 = A::GetObject(name2);
o2->Print();
if (o1 == o2) {
cout << "o1与o2指向的是同一个对象!" << endl;
}
delete o2;
return 0;
}
```
阅读全文