当前位置: 首页 > news >正文

C++友元类,工厂模式和继承的融合案例

//友元没有继承性,没有传递性,所以在animal中定义友元类是无效的class animal{public:animal(){};virtual ~animal(){};};class Cat:public animal{friend class animalFactory;private:Cat(){}private:string m_name;string m_color;public:void about(){cout<<"my name is "<<m_name<<",my color is "<<m_color<<endl;}~Cat() override{}};class Dog:public animal{friend  class animalFactory;private:Dog(){}private:string m_name;string m_color;int m_age;public:~Dog() override{}void about() const{cout<<"i am a dog,my name is "<<m_name<<",my color is"<<m_color<<",i am "<<m_age<<"years old"<<endl;}};class animalFactory{public:static animal* createCat(string name,string color){Cat* p_cat=new Cat;p_cat->m_color=color;p_cat->m_name=name;return p_cat;}public:static animal* createdog(string name,string color,int age){Dog* p_dog=new Dog;p_dog->m_name=name;p_dog->m_color=color;p_dog->m_age=age;return p_dog;}};void friend_test(){animal* cat=animalFactory::createCat("cat","black");Cat* real_cat=dynamic_cast<Cat*>(cat);real_cat->about();animal* dog=animalFactory::createdog("dog","white",1);Dog* real_dog=dynamic_cast<Dog*>(dog);real_dog->about();}//运行结果如下://my name is cat,my color is black
//i am a dog,my name is dog,my color iswhite,i am 1years old
http://www.lryc.cn/news/262101.html

相关文章:

  • 使用 ?? 重新定义逻辑以获得更严格、更安全的 JavaScript 默认值
  • Could not initialize class org.codehaus.groovy.vmplugin.v7.Java7
  • Python Django Suit:构建现代化的Django后台管理
  • 电子学会C/C++编程等级考试2021年09月(六级)真题解析
  • SpringBoot 源码解析
  • dockerfile---创建镜像
  • Raspberry PI + Codesys + EtherCAT步进驱动ECR60 Motion功能测试
  • 03 Temporal 详细介绍
  • 【算法】【动规】乘积为正数的最长子数组长度
  • Kubernetes实战(十四)-k8s高可用集群扩容master节点
  • Spring之容器:IOC(1)
  • 【.Net 6.0--通用帮助类--ConvertHelper】
  • 【加解密】报文签名与加解密,MD5,RSA,AES使用案例(基于 Java)
  • 新建vue3项目
  • 出现 Error:Unable to access jarfile xxxx\target\nacos-server.jar 解决方法
  • 记录一次API报文替换点滴
  • PMP项目管理 - 沟通管理
  • fckeditor编辑器改造示例:增加PRE,CODE控件
  • 风速预测(五)基于Pytorch的EMD-CNN-LSTM模型
  • 单元测试二(理论)-云计算2023.12-云南农业大学
  • QModelIndex 是 Qt 框架中的一个类,用于表示数据模型中的索引位置
  • 前端实现一个时间区间内,再次单选功能,使用Antd组件库内日历组件Calendar
  • 【运维笔记】Hyperf正常情况下Xdebug报错死循环解决办法
  • 嵌入式开发中的总线与时钟
  • k8s debug 浅谈
  • Day10 Liunx高级系统设计11-数据库2
  • 车载导航系统UI界面,可视化大屏设计(PS源文件)
  • 工作之踩坑记录
  • 【深度学习目标检测】四、基于深度学习的抽烟识别(python,yolov8)
  • YML学习