C++设计模式-里氏替换原则
里氏替换原则定义了继承规范。(封装、继承、多态)
定义1:类型S对象o1,类型T对象o2,o1换成o2时程序意图不变,那么S是T的子类。
定义2:使用子类不破坏父类的意图。
注意:如果子类不能完成父类意图,则不使用继承,采用依赖、聚合、组合等。
e.g.1 不符合里氏替换原则
#include <iostream>
using namespace std;
class Map {
};
class HashMap :public Map {
};
class Father {
public:virtual void DoSth(HashMap& map) {cout << "father dosth" << endl;}
};
class Sun :public Father {
public:void DoSth(Map& map) {//加override:error C3668: “Sun::DoSth”: 包含重写说明符“override”的方法没有重写任何基类方法cout << "sun dosth" << endl;}
};
int main(){Father* f = new Father;HashMap* map = new HashMap;f->DoSth(*map);//father dosth//根据里氏替换原则Sun* s = new Sun;s->DoSth(*map);//sun dosth//这时子类没有重写父类函数,歪曲了父类的意图//里氏替换原则,所有引用基类的地方必须能透明的使用其子类对象。//说明:要想子类替换父类,则子类的函数必须扩大于父类参数。
}
e.g.2不符合里氏替换原则
#include <iostream>
using namespace std;
class Map {
};
class HashMap :public Map {
};
class Father {
public:virtual void DoSth(Map& map) {cout << "father dosth" << endl;}
};
class Sun :public Father {
public:void DoSth(HashMap& map) {//加override:error C3668: “Sun::DoSth”: 包含重写说明符“override”的方法没有重写任何基类方法cout << "sun dosth" << endl;}
};
int main() {Father* f = new Father;HashMap* map = new HashMap;f->DoSth(*map);//father dosth//根据里氏替换原则Sun* s = new Sun;s->DoSth(*map);//sun dosth//这时子类没有重写父类函数,歪曲了父类的意图//里氏替换原则,所有引用基类的地方必须能透明的使用其子类对象。//说明:这里子类对父类的参数进行收窄。
}
相关文章:
C++设计模式-里氏替换原则
里氏替换原则定义了继承规范。(封装、继承、多态) 定义1:类型S对象o1,类型T对象o2,o1换成o2时程序意图不变,那么S是T的子类。 定义2:使用子类不破坏父类的意图。 注意:如果子类不…...
compose LazyColumn + items没有自动刷新问题
val dataLists by remember { mutableStateOf(datas) } 数据更改后列表不刷新问题。 val dataLists by remember { mutableStateOf(datas) } LazyColumn(modifier Modifier.padding(top 5.dp)) {items(dataLists) {....}} 可以将mutableStateOf 改为mutableStateListOf解决…...
Java八大常用排序算法
1冒泡排序 对于冒泡排序相信我们都比较熟悉了,其核心思想就是相邻元素两两比较,把较大的元素放到后面,在一轮比较完成之后,最大的元素就位于最后一个位置了,就好像是气泡,慢慢的浮出了水面一样 Jave 实现 …...
编程笔记 html5cssjs 075 Javascript 常量和变量
编程笔记 html5&css&js 075 Javascript 常量和变量 一、JavaScript 变量二、JavaScript 常量三、示例:小结: 在JavaScript中,变量和常量是用来存储数据的占位符。它们的主要区别在于可变性:变量的值可以改变,而…...
题目 1159: 偶数求和
题目描述: 有一个长度为n(n<100)的数列,该数列定义为从2开始的递增有序偶数(公差为2的等差数列),现在要求你按照顺序每m个数求出一个平均值,如果最后不足m个,则以实际数量求平均值。编程输出该平均值序…...
呼吸灯--FPGA
目录 1.breath_led.v 2.tb_breath_led.v 呼吸灯就是从完全熄灭到完全点亮,再从完全点亮到完全熄灭。具体就是通过控制PWM的占空比控制亮灭程度。 绘制PWM波的步骤就是,首先灯是在第一个时钟周期保持高电平熄灭状态,在第二个时钟周期保持1/1…...
MySQL数据库①_MySQL入门(概念+使用)
目录 1. 数据库的概念 1.1 数据库的存储介质 1.2 主流数据库 2. MySQL的基本使用 2.1 链接数据库 2.2 服务器管理 2.3 数据库,服务器和表关系 2.4 简单MySQL语句 3. MySQL架构 4. SQL分类 5. 存储引擎 本篇完。 1. 数据库的概念 数据库是按照数据结构来…...
虚幻UE 特效-Niagara特效实战-魔法阵
回顾Niagara特效基础知识:虚幻UE 特效-Niagara特效初识 其他四篇实战:UE 特效-Niagara特效实战-烟雾、喷泉、 虚幻UE 特效-Niagara特效实战-火焰、烛火、 虚幻UE 特效-Niagara特效实战-雨天、 虚幻UE 特效-Niagara特效实战-眩晕。 本篇笔记记录了使用空模…...
Qt多语言翻译
Qt多语言翻译概述 Qt提供了非常简单易用的多语言翻译机制,其核心类为QTranslator.概括来说就是利用Qt的lupdate工具将项目中所有tr函数包裹的字符串提取到.ts文件中,然后使用Qt Linguist由专门的翻译人员对提取的.ts文件进行逐个单词短语的翻译工作. 翻译…...
Latex学习记录
目录 1.Latex各种箭头符号总结 2.[Latex]公式编辑,编号、对齐 3.Latex公式编号: 多行公式多编号,多行公式单编号 4.LaTex中输入空格以及换行 1.Latex各种箭头符号总结 箭头符号 - ➚ (piliapp.com)https://cn.piliapp.com/symbol/arrow/Latex各种箭头…...
你在做绩效考核,还是绩效管理?二者有什么区别
绩效考核,为什么99%都失败,最后一地鸡毛?败在指标! 绩效管理,为什么大多数企业都能成功,而且越做越好?成在目标! 丢掉层层指标,人人制定目标,这是企业重新定…...
ele-h5项目使用vue3+vite+vant4开发:第四节、业务组件-SearchView组件开发
需求分析 展示切换动画搜索框输入文字,自动发送请求搜索结果展示搜索状态维护历史搜索展示,点击历史搜索后发送请求历史搜索更多切换动画效果 <script setup lang"ts"> import OpSearch from /components/OpSearch.vue import { ref } f…...
C系列-柔性数组
🌈个人主页: 会编程的果子君 💫个人格言:“成为自己未来的主人~” 目录 编辑 柔性数组 柔性数组的特点 柔性数组的使用 柔性数组的优势 柔性数组 也许你从来没有听说过柔性数组这个概念,但是它确实是存在的,C99中&#…...
【Linux网络编程一】网络基础1(网络框架)
【Linux网络编程一】网络基础1(网络框架) 一.什么是协议1.通信问题2.协议本质3.网络协议标准 二.协议分层1.为什么协议要分层2.如何具体的分层 三.操作系统OS与网络协议栈的关系1.核心点:网络通信贯穿协议栈 四.局域网中通信的基本原理1.封装…...
springboot156基于SpringBoot+Vue的常规应急物资管理系统
基于SpringBootVue的常规应急物资管理系统的设计与实现 摘 要 1 ABSTRACT 2 第一章 绪论 3 1.1研究背景 3 1.2研究意义 3 1.3国内外研究现状 4 1.3.1国外研究现状 4 1.3.2国内研究现状 4 1.4研究内容与方法 5 1.4.1研究内容 5 1.4.2研究方法 5 1.5论文的组织结构 5…...
学习MySQL的MyISAM存储引擎
学习MySQL的MyISAM存储引擎 MySQL的MyISAM存储引擎是MySQL早期版本中默认的存储引擎,后来被InnoDB所取代。尽管InnoDB在许多方面提供了更高级的特性,如事务处理、行级锁定和外键支持,MyISAM仍然因其简单性、高性能以及对全文搜索的支持而被广…...
nginx 的 ngx_http_upstream_dynamic_module 动态域名解析功能的使用和源码详解
tengine ngx_http_upstream_dynamic_module 动态域名解析功能的代码详细解析 1. 为什么需要域名动态解析2. 配置指令3. 加载模块3. 源码分析3.1 指令解析3.2 upstream负载均衡算法的初始化3.3 upstream负载均衡上下文的初始化3.4 获取upstream的服务器地址3.5 域名解析回调处理…...
前端vue/react项目压缩图片工具@yireen/squoosh-browser
想要在前端项目中压缩图片,然后再上传到后端保存,就需要一个压缩工具的帮助,暂时有两个依赖库可以选择:image-conversion和yireen/squoosh-browser,看了官方仓库地址和更新时间等详情,发现还是yireen/squoo…...
悬而未决:daterangepicker设置默认选择日期时间后点确认无值的BUG
daterangepicker有两个BUG: 1、startDate和endDate对设置默认日期没有问题,但对设置默认时间的支持有BUG!比如设为 moment().add( 1, day ).hours(8).minutes(20).seconds(0), //如果现在是9点,则设置的时间8:20因为比…...
composer常用命令
查看全局配置信息 composer config -gl 设置镜全局像地址 composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ 去掉-g,即表示只有当前项目使用该镜像 批量安装composer项目依赖 composer install 执行该命令后,会读取当…...
手机网站优化与App优化有什么不同_网站 SEO 外链建设应该如何进行
手机网站优化与App优化有什么不同_网站 SEO 外链建设应该如何进行 在当今移动互联网时代,无论是手机网站优化还是App优化,都是提升用户体验和提高网站流量的重要手段。这两者之间有许多不同之处,特别是在搜索引擎优化(SEO&#x…...
Ollama部署Phi-3-mini完整指南:从安装到实战应用场景解析
Ollama部署Phi-3-mini完整指南:从安装到实战应用场景解析 1. 为什么选择Phi-3-mini-4k-instruct? Phi-3-mini-4k-instruct是微软推出的轻量级AI模型,虽然只有38亿参数,但在多个基准测试中表现优异。这个模型特别适合需要快速部署…...
【从0开始学设计模式-6| 原型模式】
一个月没更新了,在找实习。。 其实还是懒了,其实每天花个半小时左右就能写一篇博客的。。。概念 原型模式(Prototype Pattern) 设计出来的目标就是:通过本体复制出与本体一样的分身(分身具有本体一样特性)定义…...
PyTorch 2.6 镜像使用教程:开箱即用,快速开启你的AI之旅
PyTorch 2.6 镜像使用教程:开箱即用,快速开启你的AI之旅 1. 为什么选择PyTorch 2.6镜像 PyTorch作为当前最流行的深度学习框架之一,其2.6版本带来了多项性能优化和新特性。但对于初学者来说,环境配置往往是最头疼的问题——CUDA…...
Qwen3.5-9B-AWQ-4bit LSTM时间序列预测模型原理与调参详解
Qwen3.5-9B-AWQ-4bit LSTM时间序列预测模型原理与调参详解 1. 引言:当LSTM遇见大语言模型 时间序列预测一直是机器学习领域的经典问题。从股票价格预测到电力负荷分析,传统LSTM模型因其出色的序列建模能力而广受欢迎。但随着大语言模型(LLM)的崛起&…...
Real-Time-Person-Removal 终极性能指南:不同配置下的速度与精度对比
Real-Time-Person-Removal 终极性能指南:不同配置下的速度与精度对比 【免费下载链接】Real-Time-Person-Removal Removing people from complex backgrounds in real time using TensorFlow.js in the web browser 项目地址: https://gitcode.com/gh_mirrors/re/…...
如何评估Android测试自动化成熟度:从入门到精通的完整指南
如何评估Android测试自动化成熟度:从入门到精通的完整指南 【免费下载链接】testing-samples A collection of samples demonstrating different frameworks and techniques for automated testing 项目地址: https://gitcode.com/gh_mirrors/te/testing-samples …...
SEO 搜索引擎公司如何提高网站的流量
SEO 搜索引擎公司如何提高网站的流量 在当今互联网时代,网站的流量直接影响着企业的品牌知名度和市场竞争力。对于许多企业来说,SEO(搜索引擎优化)成为了提升网站流量的关键途径。SEO 搜索引擎公司究竟如何有效提高网站的流量呢&…...
SQL复杂报表如何通过窗口函数优化_减少子查询提升性能
窗口函数可高效替代关联子查询,适用于累计值、移动平均、并列排名等场景,性能提升3–10倍;须注意RANK()与ROW_NUMBER()语义差异、ORDER BY的强制性、ROWS优于RANGE、窗口函数不可用于WHERE/HAVING等关键规则。窗口函数替代关联子查询的典型场…...
ns-3.43环境搭建避坑实录:从依赖冲突到‘first.cc’成功运行的完整排错指南
ns-3.43环境搭建避坑实录:从依赖冲突到first.cc成功运行的完整排错指南 当你在Ubuntu 24.04上第一次尝试搭建ns-3.43网络模拟环境时,可能会遇到各种意想不到的问题。这篇文章不是又一份按部就班的安装指南,而是一份真实的问题解决手册&#x…...
