C++之模板类重写基类构造函数(一百五十七)

news2024/11/29 12:50:11

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长!

优质专栏:Audio工程师进阶系列原创干货持续更新中……】🚀

人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药.

更多原创,欢迎关注:Android系统攻城狮

欢迎关注Android系统攻城狮

1.前言

本篇目的:理解模板类重写基类构造函数,子类必须重写。

2.应用实例

v1.0 模板类单个参数

#include<iostream>
#include <typeinfo>
using namespace std;

template<typename SERVICE>
class BaseA{
public:
  //explicit:当基类重写了构造函数函数,子类必须继承重写,否则与基类构造函数的类型不一致,导致报错.
  BaseA(SERVICE *ptr) : mPtr(ptr){
    printf("xxx--------->line = %d, type = %s, name = %s\n",__LINE__,typeid(SERVICE).name(),SERVICE::getName());
  }
  SERVICE *get(){
    printf("xxx--------->%s(), line = %d\n",__FUNCTION__,__LINE__);
    return mPtr;
  }
  void test(){
    printf("xxx--------->%s(), line = %d\n",__FUNCTION__,__LINE__);
  }

  //virtual void tt_01() = 0;
  SERVICE *mPtr;
};

class Parent: public BaseA<Parent>{
public:
  Parent() : BaseA<Parent>(this) {}
  static const char *getName() { return "media.audio"; }
  int value = 100;

  virtual void tt_01(){
    printf("xxx--------->%s(), line = %d\n",__FUNCTION__,__LINE__);
  }
};

class Derived: public Parent{
public:
  int count = 200;
  virtual void tt_01(){
    printf("xxx--------->%s(), line = %d\n",__FUNCTION__,__LINE__);
  }
};

int main(){
  //v1.0
  Parent *dr = new Derived;
  dr->get();
  dr->tt_01();

  //v2.0
  Parent *pt = new Parent;
  pt->tt_01();

}

v2.0 模板类两个参数

#include<iostream>
#include <typeinfo>
using namespace std;

template<typename SERVICE>
class BaseA{
public:
  //当基类重写了构造函数函数,子类必须继承重写,否则与基类构造函数的类型不一致,导致报错.
  //模板函数提供了两个参数.
  BaseA(SERVICE *ptr, int c) : mPtr(ptr),m_c(c){
    printf("xxx--------->line = %d, type = %s, name = %s\n",__LINE__,typeid(SERVICE).name(),SERVICE::getName());
  }
  SERVICE *get(){
    printf("xxx--------->%s(), line = %d\n",__FUNCTION__,__LINE__);
    return mPtr;
  }
  void test(){
    printf("xxx--------->%s(), line = %d\n",__FUNCTION__,__LINE__);
  }

  virtual void tt_01() = 0;
  SERVICE *mPtr;
  int m_c;
};

class Parent: public BaseA<Parent>{
public:
  Parent(int c) : BaseA<Parent>(this, c) {}
  static const char *getName() { return "media.audio"; }
  int value = 100;

  virtual void tt_01(){
    printf("xxx--------->%s(), line = %d\n",__FUNCTION__,__LINE__);
  }
};

class Derived: public Parent{
public:
  Derived(int c) : Parent(c) {}
  int count = 200;
  virtual void tt_01(){
    printf("xxx--------->%s(), line = %d\n",__FUNCTION__,__LINE__);
  }
};

int main(){
  //v1.0
  Parent *dr = new Derived(2);
  dr->get();
  dr->tt_01();

  //v2.0
  Parent *pt = new Parent(1);
  pt->tt_01();

}

3.总结

1.当基类重写了构造函数函数,子类必须继承重写,否则与基类构造函数的类型不一致,导致报错.

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

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

相关文章

matlab[1,1]生成100个随机点

close all; clc; x linspace(0,1,200); y 0 rand(1,200); sz 25; c linspace(1,10,length(x)); scatter(x,y,sz,c,filled)

IO流学习07(Java)

序列化流&#xff08;对象操作输出流&#xff09;&#xff1a; 可以把java中的对象写到本地文件中。 public objectoutputstream(outputstream out) 把基本流包装成高级流。 public final void writeobject(object obj) 把对象序列化&#xff08;写出&#xff09;到文…

如何在Docker和Kubernetes中使用代理IP?

Docker和Kubernetes是目前非常流行的容器化技术&#xff0c;这些技术被广泛用于开发、部署和管理应用程序。在某些情况下&#xff0c;需要使用代理IP来访问特定的网络资源。本文将介绍如何在Docker和Kubernetes中使用代理IP&#xff0c;并提供详细的举例说明。 一、在Docker中使…

如何增强农业防灾减灾能力,加强灾情监测与风险预估

近日&#xff0c;农业农村部会同各部门联合下发通知&#xff0c;要求各地坚持问题导向&#xff0c;分区分类指导&#xff0c;细化实化措施&#xff0c;千方百计夺取秋粮和全年粮食丰收。文件中提到要通过加强灾害风险预报预警和灾情监测调度、分区分类做好灾情防范应对来应对气…

ASEMI整流桥GBU808参数和应用

编辑-Z 整流桥GBU808是一种常见的电子元件&#xff0c;用于将交流电转换为直流电。它由四个二极管组成&#xff0c;可以全波整流。GBU808具有高电流和高电压的特点&#xff0c;适用于各种电源和电路应用。 GBU808的主要特点之一是其高电流能力。它可以承受高达8安培的电流&…

嵌入式开发之串口通讯

串口通信(Serial Communication)&#xff0c; 是指外设和计算机间&#xff0c;通过数据信号线 、地线、控制线等&#xff0c;按位进行传输数据的一种通讯方式。这种通信方式使用的数据线少&#xff0c;在远距离通信中可以节约通信成本&#xff0c;但其传输速度比并行传输低&…

springboot会员制医疗预约服务管理信息系统

针对会员制医疗预约服务行业的管理现状&#xff0c;本会员制医疗预约服务管理信息系统主要实现以下几个目标&#xff1a; 1.系统界面简洁&#xff0c;操作简便。 2.拥有精准&#xff0c;高效的查询功能。 3.使管理人员能够及时的获得精确的报表。 4.对数据…

docker入门(Linux环境下安装Docker,Docker构建镜像)

docker入门(利用docker部署web应用) 一:什么是Docker 1.1 官方解释 Docker is the world’s leading software containerization platform。 Docker公司开发&#xff0c;开源&#xff0c;托管在github跨平台&#xff0c; 支持Windows、Macos、Linux。 1.2 抽象解释 docker…

【状态设计优化DP】ABC307 E

E - Distinct Adjacent (atcoder.jp) 题意&#xff1a; 思路&#xff1a; 组合问题&#xff0c;考虑DP或组合数 组合数不好考虑&#xff0c;我们去考虑DP 因为是个环&#xff0c;我们把环拆成一条链&#xff0c;然后加一个N1&#xff0c;颜色和起点1相同&#xff0c;在这条…

天台玻璃折叠门可实现室内外空间的无缝连接

天玻璃折叠门是指安装在天台上的可折叠开合的玻璃门&#xff0c;可用于将室外空间与室内空间进行隔离或连接。设计天台玻璃折叠门时需要注意以下几点&#xff1a; 1. 结构稳固性&#xff1a;选择坚固、稳定的材料和结构设计&#xff0c;确保门体在风力和其他外力作用下不易摇晃…

如何规范的设计数据库表

前言对于后端开发同学来说&#xff0c;访问数据库&#xff0c;是代码中必不可少的一个环节。系统中收集到用户的核心数据&#xff0c;为了安全性&#xff0c;我们一般会存储到数据库&#xff0c;比如&#xff1a;mysql&#xff0c;oracle等。后端开发的日常工作&#xff0c;需要…

制作搭建宠物商城小程序,打造便捷的宠物购物体验

随着宠物市场的不断发展&#xff0c;宠物商城小程序成为了满足宠物爱好者需求的重要工具。在现代社会&#xff0c;宠物已经成为人们生活中不可或缺的一部分。作为宠物爱好者&#xff0c;我们对于宠物食品、用品、医疗保健品等需求日益增长。而宠物商城小程序则为我们提供了一个…

python_day5_file

open()打开函数&#xff1a; f open(name,mode,encoding) name:要打开的目标文件名 mode:访问模式&#xff1a;只读r、写入w、追加a 等 encoding:编码格式&#xff0c;常为UTF-8 f open("D:\Test.txt", "r", encoding"UTF-8") print(type(f))r…

Dbeaver 显示字段备注信息

一、全局设置显示字段描述

@所有人,酷雷曼年中答卷,请查收!

2023 酷雷曼VR年中答卷 顺势而行 携手共赢 七月既至&#xff0c;年过已半。 半年来&#xff0c; 我们持续以优质的产品研发、 专业的客户服务、 不断交付的技术方案&#xff0c; 将那些关于VR的美好向往&#xff0c; 变成真实可感的确定&#xff0c; 让每一种相信&am…

Vue+element实现el-table行内编辑并校验

el-table行内编辑情况情况概要&#xff1a;之前在开发过程中对于element数据的新增&#xff0c;修改&#xff0c;删除。一般直接结合el-form使用。也就是新增的时候点新增然后出来一个弹框&#xff0c;里面嵌套一个表单&#xff0c;然后保存就好了。这次项目中要求所有的新增&a…

如何学习编写安全的PHP代码? - 易智编译EaseEditing

学习编写安全的PHP代码是保证应用程序安全的重要一环。下面是几个建议来帮助你学习编写安全的PHP代码&#xff1a; 学习安全编程原则&#xff1a; 了解常见的安全漏洞类型&#xff0c;如跨站脚本攻击&#xff08;XSS&#xff09;、SQL注入、跨站请求伪造&#xff08;CSRF&…

如何刷新对黑客的认识?

黑客一般有10种类型 1、白帽黑客 白帽黑客是指通过实施渗透测试&#xff0c;识别网络安全漏洞&#xff0c;为政府及组织工作并获得授权或认证的黑客。他们也确保保护免受恶意网络犯罪。他们在政府提供的规章制度下工作&#xff0c;这就是为什么他们被称为道德黑客或网络安全专…

springboot项目中引入本地依赖jar包,并打包到lib文件夹中

1.springboot项目中引入本地依赖jar包&#xff0c;并打包到lib文件夹中 描述&#xff1a;下载了第三方相关jar包后&#xff0c;项目中引入本地jar&#xff0c;测试环境正常&#xff0c;打包线上报错提示为找到该jar 原因&#xff1a;应该在/WEB-INF/lib/xxx.jar&#xff0c;被…

vite-plugin-mock配置报错“localEnabled”不在类型”ViteMockOptions”中

vue3vite安装vite-plugin-mock之后配置报错&#xff1a; “localEnabled”不在类型”ViteMockOptions”中。 在vite.config.ts中共添加viteMockServe({ localEnabled: command ‘serve’, }),之后报了一下错误&#xff1a; 解决方法&#xff1a;与vite-plugin-mock版本有关&a…