C++Primer Plus 第十四章代码重用:总结

C++Primer Plus 第十四章代码重用:总结

提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
例如:C++Primer Plus 第十四章代码重用:总结


提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • C++Primer Plus 第十四章代码重用:总结
  • 前言
  • 14.5总结


前言

提示:这里可以添加本文要记录的大概内容:

C++Primer Plus 第十四章代码重用:总结


提示:以下是本篇文章正文内容,下面案例可供参考

14.5总结

C++提供了几种重用代码的手段。第13章介绍的公有继承能够建立is-a关系,这样派生类可以重用基类的代码。私有继承和保护继承也使得能够重用基类的代码,但建立的是has-a关系。使用私有继承时,基类的公有成员和保护成员将成为派生类的私有成员:使用保护继承时,基类的公有成员和保护成员将成为派生类的保护成员。无论使用哪种继承,基类的公有接口都将成为派生类的内部接口。这有时候被称为继承实现,但并不继承接口,因为派生类对象不能显式地使用基类的接口。因此,不能将派生对象看作是一种基类对象。由于这个原因,在不进行显式类型转换的情况下,基类指针或引用将不能指向派生类对象。还可以通过开发包含对象成员的类来重用类代码。这种方法被称为包含、层次化或组合,它建立的也是has-a关系。与私有继承和保护继承相比,包含更容易实现和使用,所以通常优先采用这种方式。然而,私有继承和保护继承比包含有一些不同的功能。例如,继承允许派生类访问基类的保护成员;还允许派生类重新定义从基类那里继承的虚函数。因为包含不是继承,所以通过包含来重用类代码时,不能使用这些功能。另一方面,如果需要使用某个类的几个对象,则用包含更适合。例如,State类可以包含一组 County
对象。多重继承(MI)使得能够在类设计中重用多个类的代码。私有M或保护MI建立has-a关系,而公有MI建立 is-a关系。MI会带来一些问题,即多次定义同一个名称,继承多个基类对象。可以使用类限定符来解决名称二义性的问题,使用虚基类来避免继承多个基类对象的问题。但使用虚基类后,就需要为编写构造函数初始化列表以及解决二义性问题引入新的规则。
类模板使得能够创建通用的类设计,其中类型(通常是成员类型)由类型参数表示。典型的模板如下

template <class T>
class c
T V;
...
public:
Ie(eonst T&val):v(val){}...
};

其中,T是类型参数,用作以后将指定的实际类型的占位符(这个参数可以是任意有效的C++名称,
但通常使用T和Type)。在这种环境下,也可以使用typename 代替

class:template <typename T>//same as template <class T>
class Rev{...};

类定义(实例化)在声明类对象并指定特定类型时生成。例如,下面的声明导致编译器生成类声明.用声明中的实际类型 short 替换模板中的所有类型参数T:

class Ic<short>sic;//implicit instantiation

这里,类名为Ic,而不是c。lc称为模板具体化。具体地说,这是一个隐式实例化。使用关键字template 声明类的特定具体化时,将发生显式实例化:template class IC;//explicit instantiation
在这种情况下,编译器将使用通用模板生成一个int 具体化–lc,虽然尚未请求这个类的对象。可以提供显式具体化–覆盖模板定义的具体类声明。方法是以template>打头,然后是模板类名称。再加上尖括号(其中包含要具体化的类型)。例如,为字符指针提供专用Ic类的代码如下:

template<>class <char *>char *stri
...
public :
Ie(const char*s):str(s){}
...
}:

这样,下面这样的声明将为chic 使用专用定义,而不是通用模板:

class Ic<char *>chic:

类模板可以指定多个泛型,也可以有非类型参数:

template <class T,class TT,int n>class Pals..

下面的声明将生成一个隐式实例化,用double代替T,用string 代替 TT,用6代替n:

Pals<double,string,6>mix;

类模板还可以包含本身就是模板的参数:

template <template <typename T>class Cl,typename U, int z>
class Trophy(...};

其中z是一个 int 值,U为类型名,CL 为一个使用 template<typename,T>声明的类模板。类模板可以被部分具体化:

template <class T>Pals<T,T,10>{...};
template <class T,class TT>Pals<T,TT,100>(...};
template <class T,int n>Pals <T,T*,n>{...);

第一个声明为两个类型相同,且n的值为6的情况创建了一个具体化。同样,第二个声明为n等于100的情况创建一个具体化:第三个声明为第二个类型是指向第一个类型的指针的情况创建了一个具体化。模板类可用作其他类、结构和模板的成员。
所有这些机制的目的都是为了让程序员能够重用经过测试的代码,而不用手工复制它们。这样可以简化编程工作,提供程序的可靠性。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/38544.shtml

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

相关文章

怎么把别人git项目保存为自己的

怎么把别人git项目保存为自己的 1.操作笔记1.1 先在自己的Git仓库里,把别人的项目克隆到本地。然后打开Git Bash或者其他的终端工具,然后使用以下命令克隆项目:1.2. 进入到本地仓库中,修改远程仓库的地址,将其指向自己的Git仓库。进入到项目的目录中,然后执行以下命令:1…

Windows定时任务执行脚本

场景&#xff1a;由于网络波动原因导致云数据库没连接上&#xff0c;从而导致某个流程引擎链接不上数据库从而导致该流程引擎服务挂了&#xff0c;网络恢复后 数据库链接正常&#xff0c;但是该引擎服务还是中止状态。 解决方案&#xff1a;在Windows中新建一个定时任务&#…

为用户转出并处理MODIS NDVI数据案例过程记述,希望对大家有用!

最近为用户转出和处理了一次MODIS NDVI数据&#xff0c;我将过程做了个总结供大家参考&#xff01;希望能帮助到一些下载和处理数据的朋友! 使用工具为三个&#xff1a;地图资源工具 和 GIS数据转换器-栅格&#xff0c;qgis。 1.选择【数据下载功能】&#xff0c;然后选择MO…

狄克斯特拉算法

狄克斯特拉算法&#xff08;Dijkstra’s algorithm&#xff09;是一种用于在带权图中找到从单一源点到所有其他顶点的最短路径的算法。它适用于处理带有非负权值的图。 下面将详细解释算法的工作原理、时间复杂度以及如何通过优化数据结构来改进其性能。 狄克斯特拉算法的工作…

复制 pdf 的表格到 markdown 版本的Typora 或者 word 中

在 pdf 中选中复制表格内容&#xff0c;直接粘贴到 typora 中失败&#xff0c;可以使用 txt文件和 excel 做过渡。 准备一个空的 txt 文件&#xff0c;将 pdf 中表格的数据复制粘贴到txt文件中&#xff0c;文本内容会以空格分开&#xff0c;如下图的形式&#xff1a; 打开 exc…

Android Gradle 开发与应用-Gradle基础

Gradle 是一个基于 Groovy 和 Kotlin DSL&#xff08;领域特定语言&#xff09;的构建自动化工具&#xff0c;特别适合用于大型项目的自动化构建。它广泛用于 Android 开发&#xff0c;因为它的灵活性和强大的依赖管理能力。下面是 Gradle 的基础介绍&#xff0c;特别是针对 An…

firewalld防火墙转发流量到其他端口forward port rules

假设云主机eth0: 47.93.27.106 tun0: inet 10.8.0.1 netmask 255.255.255.0 Show rules for a specific zone (public) sudo firewall-cmd --zonepublic --list-all Add the tun0 interface to the public zone: sudo firewall-cmd --zonepublic --add-interfacetun0 --…

手把手教你考下39张免费亚马逊AWS证书和学习徽章

小李哥目前共考了39项亚马逊云(AWS)徽章&#xff0c;这也是普通用户可考的全部徽章。这篇文章会介绍如何报名、复习、通过这39张徽章提升云计算基本技能&#xff0c;了解全球第一大云厂亚马逊云科技前沿技术。这篇文章在领英爆&#x1f525;&#xff0c;有将近100k浏览量和11k的…

MeterSphere v3.0全新启航,让软件测试工作更简单、更高效

2024年7月1日&#xff0c;MeterSphere v3.0版本正式发布。MeterSphere v3.0是新一代的测试管理和接口测试工具&#xff0c;致力于让软件测试工作更简单、更高效&#xff0c;不再成为持续交付的瓶颈。 在团队协作方面&#xff0c;针对目前企业软件测试团队所面临的测试工具不统…

Java中使用KMP算法解决力扣459.重复的子字符串问题

在解决字符串相关问题时&#xff0c;KMP&#xff08;Knuth-Morris-Pratt&#xff09;算法是一个非常有用的工具。今天&#xff0c;我们将使用KMP算法来解决力扣&#xff08;LeetCode&#xff09;上的一个经典问题&#xff1a;459. 重复的子字符串。 力扣459.重复的子字符串 题…

终止线程的典型方式

终止线程一般不使用JDK提供的 stop()/destory() 方法它们本身也被JDK废弃了。通常的做法是提供一个boolean型的终止变量&#xff0c;当这个变量置为false&#xff0c;则终止线程的运行。 public class stopThread implements Runnable {private boolean flag true;Overridepu…

数据安全与隐私保护在返利App中的实施策略

数据安全与隐私保护在返利App中的实施策略 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 一、引言 随着移动互联网的发展&#xff0c;返利App作为一种流行的…

深度学习项目GPU开发环境安装

注安装环境&#xff1a;ubuntu22.04, cuda 11.7, cudnn8.9 1.安装nvidia驱动 看可安装的Nvidia驱动版本&#xff1a;执行 ubuntu-drivers devices 安装合适版本的Nvidia驱动&#xff1a; sudo apt-get install nvidia-driver-515 注意&#xff1a;合适的版本需要尝试&#x…

5.12 Firmware Image Download command

5.12 Firmware Image Download command Firmware Image Download命令用于下载全部或部分image&#xff0c;以便将来更新控制器。当Admin Submission Queue 或 I/O Submission Queues 上的其他命令未完成时&#xff0c;可能会提交Firmware Image Download命令。Firmware Image …

从0开始建SMARTFORMS表格

一、简介步骤 1、设置纸张的大小&#xff08;页格式&#xff09; 2、设置字体大小&#xff08;样式&#xff09; 3、设置表格模板 二、详细操作步骤 1、设置页格式 事务码&#xff1a;SPAD 参考操作&#xff1a;SAP Smartforms页格式创建与使用_sap 页格式-CSDN博客 SA…

websocket (@ServerEndpoint)基本使用指南

概述 websocket 介绍 WebSocket 是一种通信协议&#xff0c;通过单个 TCP 连接提供全双工通信通道。它允许客户端和服务器之间进行双向通信、实时交互&#xff0c;比如在线聊天、实时数据展示等。 与传统的 HTTP 协议不同&#xff0c;WebSocket 连接是持久的&#xff0c;可以在…

godis源码分析——TCP服务

前言 Godis 是一个用 Go 语言实现的 Redis 服务器。 地址&#xff1a;https://github.com/HDT3213/godis?tabreadme-ov-file 简单架构描述 godis是一个中心服务&#xff0c;是TCP服务。流程大概是&#xff1a;godis开启服务&#xff0c;客户端通过TCP建立连接。客户端发起…

【网络安全】修改Host文件实现域名解析

场景 开发一个网站或者服务&#xff0c;需要在本地测试时&#xff0c;可以将线上的域名指向本地开发环境的IP地址。从而模拟真实环境中的域名访问&#xff0c;方便调试和开发。 步骤 1、以管理员身份打开命令提示符 2、编辑hosts文件&#xff1a; 输入以下命令打开hosts文…

Suno: AI音乐创作的新时代

名人说:一点浩然气,千里快哉风。 ——苏轼 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 目录 一、什么是Suno?1、Suno2、应用场景二、如何使用Suno制作音乐?步骤1:注册并登录Suno平台步骤2:创建音乐项目步骤3:生成音乐片段三、Suno的影响很高兴你打开了…

【第六节】C/C++静态查找算法

目录 前言 一、搜索查找 二、查找算法 1. 线性查找&#xff08;Linear Search&#xff09; 2. 二分查找&#xff08;Binary Search&#xff09; 3. 插值查找&#xff08;Interpolation Search&#xff09; 4. 哈希查找&#xff08;Hash Search&#xff09; 5. Fibonacc…