首页 > 编程语言 >10.28软件设计——抽象工厂模式之人与肤色 c++

10.28软件设计——抽象工厂模式之人与肤色 c++

时间:2025-01-07 23:33:36浏览次数:1  
标签:woman string 10.28 c++ 软件设计 str NULL color man

1、类图

 

2、源代码   test4.cpp     #include<iostream> #include<string> using namespace std;   //抽象产品类 男人 class Man { public:  virtual void makeM() = 0; }; //具体产品类 白色男人 class WhiteMan : public Man { public:  void makeM()  {   cout << "我是白种男人"<< endl;  } }; //具体产品类 黄色男人 class YellowMan : public Man { public:  void makeM()  {   cout << "我是黄种男人" << endl;  } }; //具体产品类 黑色男人 class BlackMan : public Man { public:  void makeM()  {   cout << "我是黑种男人" << endl;  } };   //抽象产品类 女人 class Woman { public:  virtual void makeW() = 0; }; //具体产品类 白色女人 class WhiteWoman : public Woman { public:  void makeW()  {   cout << "我是白种女人" << endl;  } }; //具体产品类 黄色女人 class YellowWoman : public Woman { public:  void makeW()  {   cout << "我是黄种女人" << endl;  } }; //具体产品类 黑色女人 class BlackWoman : public Woman { public:  void makeW()  {   cout << "我是黑种女人" << endl;  } }; //抽象工厂类 肤色 class Color { public:  virtual Man *produceMan() = 0;  virtual Woman *produceWoman() = 0; }; //具体工厂类 黄色 class Yellow : public Color { public:  Man *produceMan()  {   return new YellowMan();  }  Woman *produceWoman()  {   return new YellowWoman();  } }; //具体工厂类 白色 class White : public Color { public:  Man* produceMan()  {   return new WhiteMan();  }  Woman *produceWoman()  {   return new WhiteWoman();  } }; //具体工厂类 黑色 class Black : public Color { public:  Man * produceMan()  {   return new BlackMan();  }  Woman * produceWoman()  {   return new BlackWoman();  } }; //主函数 int main(int argc, char*argv[]) {  Color * color_y = new Yellow();  Man * man_y = color_y->produceMan();  Woman * woman_y = color_y->produceWoman();    Color * color_b = new Black();  Man * man_b = color_b->produceMan();  Woman * woman_b = color_b->produceWoman();    Color * color_w = new White();  Man * man_w = color_w->produceMan();  Woman * woman_w = color_w->produceWoman();    string t ;  string y = "Yellow";  string b = "Black";  string w = "White";  string e = "exit";  while (strcmp(t.c_str(), e.c_str()) != 0)    {   cout << "请输入标识符 ( 首字母大写 ):";   cin >> t;   if (strcmp(t.c_str(), y.c_str()) == 0)   {    man_y->makeM();    woman_y->makeW();   }   else if (strcmp(t.c_str(), w.c_str()) == 0) {    man_w->makeM();    woman_w->makeW();   }   else if (strcmp(t.c_str(), b.c_str()) == 0) {    man_b->makeM();    woman_b->makeW();   }   else if (strcmp(t.c_str(), e.c_str()) == 0) { //输入exit退出系统    cout << "退出" << endl;   }   else {    cout << "输入的标识符有误,请重新输入!" << endl;   }   cout << endl;  }       if (man_y != NULL)   {    delete man_y;    man_y = NULL;   }     if (woman_y != NULL)   {    delete woman_y;    woman_y = NULL;   }     if (man_b != NULL)   {    delete man_b;    man_b = NULL;   }     if (woman_b != NULL)   {    delete woman_b;    woman_b = NULL;   }     if (man_w != NULL)   {    delete man_w;    man_w = NULL;   }     if (woman_w != NULL)   {    delete woman_w;    woman_w = NULL;   } } 3、遇到的问题   3.1 指针使用不正确,应如如下代码     //抽象工厂类 肤色 class Color { public:  virtual Man *produceMan() = 0;  virtual Woman *produceWoman() = 0; }; 3.2 字符串初始化报错   string t = NULL;

标签:woman,string,10.28,c++,软件设计,str,NULL,color,man
From: https://www.cnblogs.com/kongxiangzeng/p/18658655

相关文章

  • 10.18软件设计——工厂方法模式之加密算法
    软件设计——工厂方法模式之加密算法1、类图   2、源代码 2.1结构目录   2.2所需jar包 这里分享几个下载jar包的网址: http://www.mvnrepository.com/ http://mvnrepository.com/ http://findjar.com http://sourceforge.net/ 注:将......
  • 1.3.1 C++新特性
    文章目录1.3.1C++新特性1.智能指针1.为什么要用智能指针2.三种智能指针对比3.shared_ptr1.使用智能指针可以自动释放占用的内存2.共享所有权指针的传播和释放3.常用函数4.要注意的问题4.unique_ptr5.weak_ptr弱引用的智能指针1.基本用法2.weak_ptr返回this指......
  • C++STL<unordered_map>
    在C++中,<unordered_map>是一种基于哈希表的关联容器,它存储键值对,并且不保证元素的排序。以下是unordered_map的一些常用函数及其使用方式:插入元素:insert(constvalue_type&val)或insert(initializer_listinit)用于插入元素。std::unordered_map<int,std::string......
  • C++头文件map
    在C++中,<map>头文件提供了一种关联容器,它存储的是键值对(std::pair),并且会自动根据键进行排序。以下是一些常用的map函数及其使用方式:插入元素:insert(constvalue_type&val)或insert(initializer_listinit)用于插入元素。std::map<int,std::string>myMap;myMap.......
  • C++编程基础:类型转换四式速记const_cast,dynamic_cast,reinterpret_cast,static_cast
    C++编程就应该使用C++风格的转换,不要再使用不安全的C风格的转换方法了。这里先给一个C++编程风格的类型转换四式速记打油诗,帮大家记忆其用法:C++强制转换妙,四类各有其诀窍。const_cast用途巧,常量限制可取消,const属性轻松搞,函数参数常需要。dynamic_cast专长显,继承体系......
  • 在 C++ 中优雅地处理 JSON:nlohmann/json 库实践指南
    JSON(JavaScriptObjectNotation)作为一种轻量级的数据交换格式,在现代软件开发中扮演着重要角色。在C++开发中,nlohmann/json库因其易用性和灵活性而广受欢迎。本文将通过实例介绍如何使用这个强大的库进行JSON数据的序列化和反序列化操作。环境准备首先,我们需要配置项目......
  • DirectX 修复工具 V4.3 绿色增强版:完美解决 DirectX 和 C++ 问题,修复 0xc000007b 错误
    介绍DirectX修复工具V4.3是一款高效的系统修复工具,专为解决系统异常和C++运行库问题而设计,尤其对解决0xc000007b错误有着极高的修复率。本工具支持对所有版本的DirectX进行修复,并在增强版中新增了对C++运行库问题的修复,提供了一个全面且可靠的解决方案。主要功能......
  • libfacedetection人脸检测C++代码实现Demo
    目录1简介2如何编译3注意事项4接口说明5演示Demo5.1开发环境5.2功能介绍5.3下载地址1简介        libfacedetection是一个基于CNN的人脸检测的开源库。CNN模型已在C源文件中转换为stasticvariales。源代码不依赖于任何其他库。你需要的只是一个......
  • 《 C++ 点滴漫谈: 十八 》写出无懈可击的代码:全面解析 C++ 的 explicit 和 implicit 显
    摘要在C++中,隐式和显式转换是程序设计中至关重要的概念,而关键字explicit则是掌控这一机制的核心工具。本文从基础概念出发,全面解析explicit和隐式转换的关系,深入探讨它们在构造函数、防止隐式类型转换错误等场景中的应用。通过对比分析隐式与显式的优缺点,以及C++11......
  • C++ Qt练习项目 QSpinBox和QDoubleSpinBos 未完待续
    个人学习笔记新建项目设计UI......