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.mzph.cn/news/218844.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

独孤思维:白嫖我项目,还这么理直气壮

你在副业圈呆久了&#xff0c;会遇到各种各样&#xff0c;形形色色的人。 昨天有个人突然冒出来&#xff0c;问我绝版书某个细节怎么规避。 我看了和他之前的聊天记录&#xff0c;他是去年加我的&#xff0c;当时加我的时候给他发了一些资料。 这些免费的资料&#xff0c;主…

代码审计中的常见漏洞【一】

预计更新一、代码审计简介 代码审计的定义、作用和流程代码审计的分类和方法论 二、代码审计的准备工作 代码审计前需要了解的基础知识和技能代码审计的工具和环境准备 三、代码审计中的常见漏洞 SQL注入漏洞XSS漏洞CSRF漏洞 4.文件包含漏洞 5.文件上传漏洞 四、代码审计…

AC修炼计划(AtCoder Beginner Contest 332)

传送门&#xff1a;AtCoder Beginner Contest 332 - AtCoder a,b,c都还是很基础了。d题是一个bfs的纯暴力问题。 E - Lucky bag 看看范围&#xff0c;n15&#xff0c;第一个想法是dfs纯暴力&#xff0c;但所有的情况太大&#xff0c;各种决策层出不穷&#xff0c;会t。所以转…

VM实现方式及其优缺点

在众多VM实现方式中&#xff0c;我可以说几种常见的实现方式。例如&#xff0c;基于栈的方式、基于寄存器的方式、基于堆的方式等。下面我将分别对这几种方式进行阐述&#xff0c;并讨论它们各自的优点和缺点&#xff0c;以及它们各自的应用场景。 基于栈的方式 基于栈的方式…

Lightweight Directory Access Protocol (LDAP 轻量级目录访问协议)

The Lightweight Directory Access Protocol (LDAP /ˈɛldp/) is an open, vendor-neutral, industry standard application protocol for accessing and maintaining distributed directory information services over an Internet Protocol (IP) network.[1] Directory serv…

RocketMQ可视化工具 打包遇到的yarn intall 问题

文章目录 RocketMQ可视化工具1.github上下载2.修改参数3.运行4.打包5.出错6.解决7.重试8.再解决9.很奇怪运行没错&#xff0c;但是测试错啦10.不想深究&#xff0c;直接跳过测试11.展示成功 RocketMQ可视化工具 1.github上下载 下载地址 https://github.com/apache/rocketmq-…

基于Hadoop的电商数据分析系统设计与实现

基于Hadoop的电商数据分析系统设计与实现 Design and Implementation of E-commerce Data Analysis System based on Hadoop 目录 目录 2 摘要 3 关键词 3 第一章 绪论 4 1.1 研究背景 4 1.2 研究目的与意义 5 1.3 现有研究综述 6 第二章 Hadoop技术介绍 8 2.1 Hadoop概述 8 2.…

redis:二、缓存击穿的定义、解决方案(互斥锁、逻辑过期)的优缺点和适用场景、面试回答模板

缓存击穿的定义 缓存击穿是一种现象&#xff0c;具体就是某一个数据过期时&#xff0c;恰好有大量的并发请求过来&#xff0c;这些并发的请求可能会瞬间把DB压垮。典型场景就是双十一等抢购活动中&#xff0c;首页广告页面的数据过期&#xff0c;此时刚好大量用户进行请求&…

protobuf、protobuf-c、protobuf-c-rpc在Linux(Ubuntu18.04)编译安装及交叉编译arm\aarch64版本

protobuf、protobuf-c、protobuf-c-rpc在Linux&#xff08;Ubuntu18.04&#xff09;编译安装及交叉编译arm\aarch64版本 文章目录 protobuf、protobuf-c、protobuf-c-rpc在Linux&#xff08;Ubuntu18.04&#xff09;编译安装及交叉编译arm\aarch64版本一、前言二、protobuf、rp…

Unity 置顶OpenFileDialog文件选择框

置顶文件选择框 &#x1f32d;处理前&#x1f959;处理后 &#x1f32d;处理前 &#x1f959;处理后 解决方案

【TI毫米波雷达入门-10】TI毫米波速度检测思路

知识回顾 FMCW chirp 雷达收发流程 中频信号 傅里叶变换 多目标检测 距离分辨率 最大距离 公式总结 FMCW数据处理流程示例 两个维度看图表 从range维度&#xff0c;水平方向上&#xff0c;反映每个chirp 发出的FMCW被接收天线检测到&#xff0c;2个点的目标&#xff0c;对应两个…

滑动窗口如人生,回顾往事不复还———力扣刷题

第一题&#xff1a;长度最小的子数组 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 思路&#xff1a; 第一想法肯定时暴力枚举&#xff0c;枚举数组任何一个元素&#xff0c;把他当起始位置&#xff0c;然后从起始位置找最短区间&#xff0c;使得…

uniapp原生插件之安卓app添加到其他应用打开原生插件

插件介绍 安卓app添加到其他应用打开原生插件&#xff0c;接收分享的文本和文件&#xff0c;支持获取和清空剪切板内容 插件地址 安卓app添加到其他应用打开原生插件&#xff0c;支持获取剪切板内容 - DCloud 插件市场 超级福利 uniapp 插件购买超级福利 详细使用文档 u…

Nyquist Theorem(取样定理)

取样定理&#xff0c;又称为奈奎斯特定理&#xff08;Nyquist Theorem&#xff09;&#xff0c;是信号处理领域中一项至关重要的基本原理。它规定了对于连续时间信号&#xff0c;为了能够完全准确地还原出原始信号&#xff0c;即使是在离散时间下进行采样和再构建&#xff0c;都…

Mybatis-plus更新多张表,保证事务安全的情况下使用异步多线程实现(待验证)

Mybatis-plus更新多张表,保证事务安全的情况下使用异步多线程实现(待验证) 文章目录 Mybatis-plus更新多张表,保证事务安全的情况下使用异步多线程实现(待验证)方案一:方案二:方案三:使用mybatis-plus更新数据库的五张不同的表,开启五个线程&#xff0c;每个线程负责更新一张表…

【JUC】二十七、synchronized锁升级之无锁

文章目录 1、背景2、Monitor、Java对象、线程如何关联起来的&#xff1f;3、synchronized锁升级4、锁升级之无锁 关于synchronized同步&#xff0c;能用无锁结构就不要用锁&#xff1b;能锁块&#xff0c;就不要锁整个方法&#xff1b;能用对象锁&#xff0c;就不要用类锁。 用…

【Py/Java/C++三种语言OD2023C卷真题】20天拿下华为OD笔试【单调栈】2023C-找最小数【欧弟算法】全网注释最详细分类最全的华为OD真题题解

文章目录 题目描述与示例题目描述输入输出示例一输入输出说明 示例二输入输出 示例三输入输出 解题思路代码PythonJavaC时空复杂度 华为OD算法/大厂面试高频题算法练习冲刺训练 题目描述与示例 题目描述 给一个正整数 NUM1&#xff0c;计算出新正整数 NUM2。NUM2 为 NUM1 中移…

LDO和DCDC的区别

目录标题 前言什么是LDO&#xff1f;什么是DCDC&#xff1f;LDO和DCDC的主要区别 前言 对于初学者来说&#xff0c;最常见到的LDO就是最小系统板上自带的低压差线性稳压器&#xff0c;其用于将USB输入的5V电压转化为3.3V供给单片机。最长用到DCDC器件&#xff0c;就是在做小车…

python算法例18 滑动窗口的最大值

1. 问题描述 给定一个可能包含重复整数的数组和一个大小为k的滑动窗口&#xff0c;从左到右在数组中滑动这个窗口&#xff0c;找到数组中每个窗口内的最大值。 2. 问题示例 给出数组[1&#xff0c;2&#xff0c;7&#xff0c;7&#xff0c;8]&#xff0c;滑动窗口大小为k3&a…

Redis - 主从集群下的主从复制原理

主从复制过程 数据同步演变过程 sync 同步 Redis 2.8 版本之前&#xff0c;首次通信成功后&#xff0c; slave 会向 master 发送 sync 数据同步请求。然后 master 就会将其所有数据全部发送给 slave &#xff0c;由 slave 保存到其本地的持久化文件中。这个过 程…