当前位置: 首页> 教育> 幼教 > 单例模式学习cpp

单例模式学习cpp

时间:2025/7/11 8:01:20来源:https://blog.csdn.net/m0_61862494/article/details/140639569 浏览次数:0次

现在我们要求定义一个表示总统的类型。presented可以从该类型继承出French present和American present的等类型。这些派生类型都只能产生一个实例

为了设计一个表示总统的类型,并从该类型派生出只能产生一个实例的具体总统(如法国总统和美国总统),我们可以利用单例模式和继承来实现。下面是一个可能的设计方案:

  1. 定义基类 President:该基类可以包含一些共有的属性和方法。
  2. 派生具体总统类 FrenchPresidentAmericanPresident:每个派生类都实现单例模式,确保只能有一个实例。

下面是具体的代码实现:

#include <iostream>
#include <memory>
#include <mutex>// 基类 President
class President {
public:virtual void showIdentity() const = 0;protected:President() {}virtual ~President() {}
};// 法国总统 FrenchPresident 类
class FrenchPresident : public President {
public:static FrenchPresident& getInstance() {static FrenchPresident instance;return instance;}void showIdentity() const override {std::cout << "I am the French President." << std::endl;}// 删除拷贝构造函数和赋值运算符FrenchPresident(const FrenchPresident&) = delete;FrenchPresident& operator=(const FrenchPresident&) = delete;private:FrenchPresident() {}~FrenchPresident() {}
};// 美国总统 AmericanPresident 类
class AmericanPresident : public President {
public:static AmericanPresident& getInstance() {static AmericanPresident instance;return instance;}void showIdentity() const override {std::cout << "I am the American President." << std::endl;}// 删除拷贝构造函数和赋值运算符AmericanPresident(const AmericanPresident&) = delete;AmericanPresident& operator=(const AmericanPresident&) = delete;private:AmericanPresident() {}~AmericanPresident() {}
};int main() {// 获取法国总统实例FrenchPresident& frenchPresident = FrenchPresident::getInstance();frenchPresident.showIdentity();// 获取美国总统实例AmericanPresident& americanPresident = AmericanPresident::getInstance();americanPresident.showIdentity();// 确保每个类只能有一个实例FrenchPresident& frenchPresident2 = FrenchPresident::getInstance();AmericanPresident& americanPresident2 = AmericanPresident::getInstance();if (&frenchPresident == &frenchPresident2) {std::cout << "Both FrenchPresident instances are the same." << std::endl;}if (&americanPresident == &americanPresident2) {std::cout << "Both AmericanPresident instances are the same." << std::endl;}return 0;
}

解释

  1. 基类 President:定义了一个纯虚函数 showIdentity(),使得派生类必须实现该方法。
  2. FrenchPresidentAmericanPresident
    • 实现了单例模式,通过 getInstance() 方法返回类的唯一实例。
    • 私有化了构造函数、拷贝构造函数和赋值运算符,以确保无法从外部创建实例或拷贝实例。
    • 实现了基类的纯虚函数 showIdentity(),提供了具体的身份信息。
  3. main() 函数:展示了如何获取和使用这些单例实例,并验证每个类只能有一个实例。
关键字:单例模式学习cpp

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: