使用模板来解决接口继承问题

 

一.定义2个有继承关系的接口

struct IA
{virtual void Test1()=0;
};struct IB:public IA
{virtual void Test2()=0;
};

二.定义2个类来实现

class A:public IA
{virtual void Test1() {}
};class B:public IB
{
public:virtual void Test2() {}
};

类B将无法使用,必须重新实现IA的Test1方法,如下代码

class B:public IB
{
public:virtual void Test2() {}virtual void Test1() {}
};

这样的做法使得接口继承非常麻烦

三.使用模板来实现接口单继承

c#和java都是可以单类和多接口继承,c++则可以多个类继承,这使得多继承设计上带来麻烦,尽量使用单继承来避免问题.

先看一个非模板的实现

class CA: public IB
{
public:virtual void Test1() {}
};class CB:public CA
{
public:virtual void Test2() {}
};

以上的定义,CB可以声明,CA则会编译错误,根据上面的思想,可以将其改造为模板版本

template<class IActual>
class CA: public IActual
{
public:virtual void Test1() {}
};template<class IActual>
class CB: public CA<IActual>
{
public:virtual void Test2() {}
};template<class IActual>
class CC: public CB<IC>
{
public:virtual void Test3() {}
};

测试代码:

int main()
{CB<IB> b;CC<IC> c;IB *p=dynamic_cast<IB*>(&b);p->Test2();return 0;
};

转载于:https://www.cnblogs.com/Clingingboy/p/3407339.html

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

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

相关文章

python time模块详解

2019独角兽企业重金招聘Python工程师标准>>> python time模块详解 分类&#xff1a; python2009-03-28 23:35 89831人阅读 评论(9) 收藏 举报 pythonstructstringdstimportdate python 的内嵌time模板翻译及说明 一、简介 time模块提供各种操作时间的函数 说明&am…

单例写法 转

如何正确地写出单例模式 1.懒汉式&#xff0c;线程不安全 这段代码简单明了&#xff0c;而且使用了懒加载模式&#xff0c;但是却存在致命的问题。当有多个线程并行调用 getInstance() 的时候&#xff0c;就会创建多个实例。也就是说在多线程下不能正常工作 public class Singl…

【RK3399Pro学习笔记】十九、在ROS中点亮LED灯

目录创建ROS工作空间创建ROS功能包CSysFs方式&#xff08;需root&#xff09;源文件blink.cppgpiolib.cpp头文件gpiolib.hCMakeLists.txt运行代码调用shell命令方式&#xff08;无需root&#xff09;源文件blink.cppCMakeLists.txt运行代码平台&#xff1a;华硕 Thinker Edge R…

opencv中的Mat类型

Mat类型主要是跟matlab中的数据类型一样。故用起来很方便。 Mat最大的优势跟STL很相似&#xff0c;都是对内存进行动态的管理&#xff0c;不需要之前用户手动的管理内存&#xff0c;对于一些大型的开发&#xff0c;有时候投入的lpImage内存管理的时间甚至比关注算法实现的时间还…

C/C++与内存相关的函数

C语言的标准函数库与内存管理有关的函数从功能上分为两类:一类是系统对内存操作的函数,例如,读内存的函数、写内存函数,如从指定地址向内存写一个字节,一个字或向内存读一个字节或一个字操作;另一类是供用户动态使用内存的函数,例如,分配C程序一块存储区,并将该区清零函数; 1.动…

flask jinja2 如何遍历新闻列表

NEWS_DICT [{"newstitle": "新闻1", "url": "newsurl1"},{"newstitle": "新闻2", "url": "newsurl2"},{"newstitle": "新闻3", "url": "newsurl3"…

hihocoder [Offer收割]编程练习赛24

比赛https://hihocoder.com/contest/offers24/problems 应该能拿到个鼠标垫 舒服了 这个oj体验好差&#xff0c;每次都要先因为选错语言CE一发&#xff0c;而且刷新之后还是默认GCC A ⼩Hi的钟表 算秒数&#xff0c;算角度&#xff0c;注意180以内&#xff0c;所以大于180之后拿…

LaTex bib引用知网论文NoteExpress格式文献 —— cnki2bib

目录先决条件安装使用最后…棘手的用法简单用法获取NoteExpress格式到剪贴板将剪贴板内容转换在LaTex中使用调用格式效果TeXstudio 4.2.3 Windows 10 20H2 以下内容引自Python cnki2bib包介绍 先决条件 Python3 安装 pip install cnki2bibWinR打开cmd使用以上命令安装 使…

测试配置yum仓库的http镜像

测试配置yum仓库的http镜像一、基础环境 1、在tvm-base的基础上&#xff0c;复制一个镜像为tvm-yum来测试。 2、网络&#xff1a; eth0&#xff1a;host-only&#xff08;用于虚拟内网&#xff0c;手动固定IP&#xff0c;这样从宿主机可以直接连接到这个vm&#xff09; eth1&am…

24. 设计原则

总的来说是高内聚低耦合&#xff0c;内聚是把变化点进行封装&#xff0c;耦合还是要有的&#xff0c;只是要尽量少&#xff0c;不同内聚点的联系方式有两种&#xff0c;一种就是继承&#xff0c;一种就是组合。组合又分为基于接口组合还是基于类组合&#xff0c;基于接口就可以…

js中 json详解

var aa {name:"zoumm",age:23};var bb JSON.stringify(aa);console.log(bb); //打印出{"name":"zoumm","age":23} json的语法可以表示以下三种类型的值。 1、简单值&#xff1a;可以在json中表示字符串、数值、布尔和null。 2、对…

纸张大小

A0到A10的纸张尺寸表 纸的型号高(mm)x宽&#xff08;mm&#xff09;毫米高(mm)x宽(mm)英寸4A02378 x 1682 mm93.6 x 66.2 in2A01682 x 1189 mm66.2 x 46.8 inA01189 x 841 mm46.8 x 33.1 inA1841 x 594 mm33.1 x 23.4 inA2594 x 420 mm23.4 x 16.5 inA3420 x 297 mm16.5 x 11.7…

试用合肥工业大学学位论文 LaTeX 模板(HFUT_Thesis)

目录编辑器模板下载TeXstudio 4.2.3 Windows 10 20H2 编辑器 编辑器的下载和安装参考Latex下载 —— 倔强菜鸟(转载) 模板下载 见合肥工业大学硕士毕业论文的LaTex模板? 感谢大佬~ 大佬的项目地址&#xff1a;https://github.com/HFUTTUG/HFUT_Thesis/releases 下载下来后…

[CareerCup] 1.1 Unique Characters of a String 字符串中不同的字符

1.1 Implement an algorithm to determine if a string has all unique characters. What if you cannot use additional data structure? 这道题让我们判断一个字符串中是否有重复的字符&#xff0c;要求不用特殊的数据结构&#xff0c;这里应该是指哈希表之类的不让用。像普…

怎么查询局域网内全部电脑IP和mac地址..

在局域网内查询在线主机的IP一般比较简单&#xff0c;但局域网内全部电脑的IP怎么才能够查到呢&#xff1f;查询到IP后我还要知道对方的一些详细信息&#xff08;如MAC地址、电脑名称等&#xff09;该怎么查询呢&#xff1f;&#xff1f;&#xff1f; 工具/原料 Windows 网络 方…

python flask 通过ajax向后台传递数组参数

https://blog.csdn.net/m0_38061194/article/details/78851152 ajax 像后台传递参数&#xff0c;一般是字典的形式传递&#xff0c;但是如果字典的value的值是一个数组的话&#xff0c;通过request.form 获取得到的结果是 None。这是就需要把数组对象转化为json字符串&#xf…

JS,JQuery杂谈

JS返回页面&#xff1a; JS返回前一个页面&#xff0c;经常看到有人用window.history.go(-1)这种方法 这种放的确可以返回&#xff0c;也仅仅只是返回&#xff0c;返回的页面信息却没有刷新。也有人用windows.history.back()&#xff0c;但是经常返回的时候会丢失页面&#xf…

C语言一阶低通、高通滤波器滤除截止频率外的杂波

目录理论推导产生测试信号sin_cal.csin_cal.h生成波形一阶滤波器FirstOrderFilter.cFirstOrderFilter.h测试低通滤波器高通滤波器IAP15W4K58S4 Keil uVision V5.29.0.0 PK51 Prof.Developers Kit Version:9.60.0.0 串口示波器&#xff1a;Vofa 1.3.10 理论推导 低通滤波器 …

OAF_开发系列19_实现OAF对话框提示dialogPage(案例)

20150716 Created By BaoXinjian 一、摘要 Oracle dialogPage是OAF提示框的一种用法&#xff0c;具体应用例如在删除数据时&#xff0c;提示用户进行确认是否可以删除 二、实现方法 在CO中添加如下方法 public void processFormRequest(OAPageContext pageContext,OAWebBean we…

flask ajax 笔记

html 其中 {{url_for(add)}} 的 add 为 flask 路由函数名 dataType: "json", 加了这句&#xff0c;才能读到 flask 返回的 json var my_tra_info {"key1":"val1","key2":val2};$.ajax({type:post,async:false,url:"{{url_fo…