(12.) 设计并实现一个ObjectCounter类,要求: (1)对系统中现存的本类实例计数; (2)每个对象都有唯一的整型ID,按照创建的次序建立; (3)获取当前系统中本类对象的个数; (4)获取每个对象的ID。 用c++实现
时间: 2023-11-28 20:50:40 浏览: 67
以下是ObjectCounter类的实现,满足题目要求:
```c++
#include <iostream>
#include <vector>
class ObjectCounter {
private:
static int count; // 类中实例的计数器
int id; // 对象的唯一ID
static std::vector<ObjectCounter*> objectsList; // 存储对象指针的动态数组
public:
ObjectCounter() {
count++; // 实例计数器加1
id = count; // 为对象分配唯一的ID
objectsList.push_back(this); // 将对象指针加入动态数组
}
ObjectCounter(const ObjectCounter& obj) {
count++; // 实例计数器加1
id = count; // 为对象分配唯一的ID
objectsList.push_back(this); // 将对象指针加入动态数组
}
virtual ~ObjectCounter() {
count--; // 实例计数器减1
for (auto it = objectsList.begin(); it != objectsList.end(); ++it) {
if (*it == this) {
objectsList.erase(it); // 从动态数组中删除对象指针
break;
}
}
}
static int getCount() {
return count; // 获取当前系统中本类对象的个数
}
int getId() const {
return id; // 获取对象的ID
}
};
int ObjectCounter::count = 0;
std::vector<ObjectCounter*> ObjectCounter::objectsList;
int main() {
ObjectCounter obj1;
ObjectCounter obj2;
ObjectCounter obj3;
std::cout << "Count of ObjectCounter instances: " << ObjectCounter::getCount() << std::endl;
std::cout << "ID of obj1: " << obj1.getId() << std::endl;
std::cout << "ID of obj2: " << obj2.getId() << std::endl;
std::cout << "ID of obj3: " << obj3.getId() << std::endl;
return 0;
}
```
输出结果:
```
Count of ObjectCounter instances: 3
ID of obj1: 1
ID of obj2: 2
ID of obj3: 3
```
说明该ObjectCounter类的实现是正确的。
阅读全文