实现一个 Painter类继承于类Object(此类中有一个纯虚函数void print()),要求Painter类只能实例化一次;
时间: 2024-09-20 16:03:27 浏览: 35
【substance painter】如何制作一个生锈磨损的枪
为了确保`Painter`类仅能实例化一次,我们可以采用单例模式(Singleton Pattern),这是一种常用的软件设计模式,限制一个类只有一个实例,并提供全局访问点。同时,由于`Printer`类有纯虚函数,我们可以创建一个抽象基类`Object`并让`Painter`继承自它。以下是使用C++的实现:
首先,我们需要定义一个`Object`抽象基类:
```cpp
class Object {
public:
virtual void print() const = 0; // 纯虚函数
};
// 保证Object派生类只能实例化一次
class SingletonObject : public Object {
private:
static SingletonObject* instance; // 静态成员变量
protected:
SingletonObject() {}
private:
~SingletonObject() {} // 防止意外销毁
public:
static Object* getInstance() {
if (instance == nullptr) {
instance = new SingletonObject();
}
return instance;
}
// 防止外部复制构造和赋值操作
SingletonObject(const SingletonObject&) = delete;
SingletonObject& operator=(const SingletonObject&) = delete;
};
```
然后,`Painter`类继承自`SingletonObject`:
```cpp
class Painter : public SingletonObject {
public:
// 如果需要添加其他功能,可以在Painter类中实现
void draw() override { print(); } // 覆盖print方法实现特定功能
};
```
现在`Painter`类只会有一个实例,并且通过`SingletonObject`的`getInstance()`方法获取。
阅读全文