C++之委托构造函数实例(二百四十三)

news2024/7/4 5:54:54

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

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

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

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

欢迎关注Android系统攻城狮

1.前言

本篇目的:理解C++之委托构造函数用法。

2.C++之委托构造函数介绍

委托构造函数是C++11引入的一个特性,允许某个构造函数在初始化列表中调用同一个类中的其他构造函数。这样可以避免代码重复,提高代码的可维护性和重用性。

在C++中,一个类可以有多个构造函数,每个构造函数负责初始化对象的不同部分或者提供不同的参数选项。在某些情况下,多个构造函数会有一些共同的初始化代码,这就会导致代码冗余。委托构造函数解决了这个问题,让一个构造函数可以重用其他构造函数的初始化代码。

委托构造函数的语法非常简单,就是在构造函数的初始化列表中使用其他构造函数的调用。具体来说,委托构造函数的语法如下:

class ClassName {
public:
    ClassName(参数列表) : 构造函数调用 {
        // 初始化代码
    }
};

在上面的语法中,构造函数调用就是委托给其他构造函数的调用。
使用委托构造函数的一些注意事项:

  1. 委托构造函数只能在初始化列表中调用,不能在构造函数的函数体内部调用。
  2. 委托构造函数的调用必须放在构造函数的初始化列表的最开始。
  3. 一个类可以有多个委托构造函数,它们之间可以相互调用。
  4. 如果委托构造函数没有给出初始化列表,那么默认会调用隐式的默认构造函数。
  5. 委托构造函数的调用顺序和委托的顺序无关,只与初始化列表中的顺序有关。

3.实例

v1.0

#include <iostream>
#include <string>

class SurfaceFlinger {
public:
  SurfaceFlinger(std::string service_name, int num) : SurfaceFlinger(service_name) {
    printf("xxx--------->%s(), line = %d, service_name = %s, num = %d\n",__FUNCTION__,__LINE__,service_name.c_str(),num);
  }

  explicit SurfaceFlinger(std::string &service_name) {
    printf("xxx--------->%s(), line = %d, service_name = %s\n",__FUNCTION__,__LINE__,service_name.c_str());
  }
};

int main() {
  SurfaceFlinger sf1("Hello World", 1001);
  return 0;
}

打印:
xxx--------->SurfaceFlinger(), line = 11, service_name = Hello World
xxx--------->SurfaceFlinger(), line = 7, service_name = Hello World, num = 1001

总结

  • SurfaceFlinger(std::string service_name, int num)构造函数初始化列表中调用了SurfaceFlinger(service_name)构造函数,并且将service_name传给单个参数的构造函数。
  • 被调用的构造函数SurfaceFlinger(service_name)要比调用者 SurfaceFlinger(std::string service_name, int num)先执行。

v2.0

#include <iostream>
#include <string>

class SurfaceFlinger {
public:
  SurfaceFlinger(std::string service_name, int num) : SurfaceFlinger(service_name) {
    printf("xxx--------->%s(), line = %d, service_name = %s, num = %d\n",__FUNCTION__,__LINE__,service_name.c_str(),num);
  }

  explicit SurfaceFlinger(std::string &service_name): Fname(service_name) {
    printf("xxx--------->%s(), line = %d, service_name = %s, Fname = %s\n",__FUNCTION__,__LINE__,service_name.c_str(),Fname.c_str());
  }
  private:
  std::string Fname;
};

int main() {
  SurfaceFlinger sf1("MrZhang", 1001);
  return 0;
}

总结

  • SurfaceFlinger(std::string service_name, int num)函数将service_name通过构造函数列表传递给被调用的构造函数SurfaceFlinger(service_name)
  • 被委托构造函数SurfaceFlinger(std::string &service_name): Fname(service_name)将service_name传给成员变量Fname。

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

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

相关文章

学信息系统项目管理师第4版系列26_项目绩效域(下)

1. 项目工作绩效域 1.1. 涉及项目工作相关的活动和职能 1.2. 预期目标 1.2.1. 高效且有效的项目绩效 1.2.2. 适合项目和环境的项目过程 1.2.3. 干系人适当的沟通和参与 1.2.4. 对实物资源进行了有效管理 1.2.5. 对采购进行了有效管理 1.2.6. 有效处理了变更 1.2.7. 通…

第八章:网络设备文件管理)

网络设备文件管理 一、网络设备的文件系统1. 网络设备的存储方式2. 网络设备的操作 二、文件管理1. 配置文件的操作2. 配置文件的显示与维护![ ](https://img-blog.csdnimg.cn/a4f36f4e8f50422eb76be4ea7794bad9.png) 三、网络连通测试四、系统调试 一、网络设备的文件系统 1. …

2023年09月 C/C++(六级)真题解析#中国电子学会#全国青少年软件编程等级考试

C/C编程&#xff08;1~8级&#xff09;全部真题・点这里 Python编程&#xff08;1~6级&#xff09;全部真题・点这里 第1题&#xff1a;生日相同 在一个有180人的大班级中&#xff0c;存在两个人生日相同的概率非常大&#xff0c;现给出每个学生的名字&#xff0c;出生月日。试…

idea 启动出现 Failed to create JVM JVM Path

错误 idea 启动出现如下图情况 Error launching IDEA If you already a 64-bit JDK installed, define a JAVA_HOME variable in Computer > System Properties> System Settings > Environment Vanables. Failed to create JVM. JVM Path: D:\Program Files\JetB…

Redis微服务架构

Redis微服务架构 缓存设计 缓存穿透 缓存穿透是指查询一个根本不存在的数据&#xff0c;缓存层和存储层都不会命中&#xff0c;通常出于容错的考虑&#xff0c;如果从存储层查不到数据则不写入缓层。 缓存穿透将导致不存在的数据每次请求都要到存储层去查询&#xff0c;失去…

真正牛的项目经理,都做到了这几点

大家好&#xff0c;我是老原。 不管你是在大厂还是小厂&#xff0c;都可以看到这么一群人&#xff0c;他们具备&#xff1a;优秀的产品规划、持续的商务拓展、准时交付项目/产品。 然后大部分人是&#xff1a;一般的产品规划、眼睁睁看着客户流失、项目/产品交付不断推迟。 …

private key ssh连接服务器

这里用到的软件是PuTTY。 https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html 保存本地rsa文件后&#xff0c;打开软件PuTTYgen&#xff0c;点击Load导入文件&#xff0c;输入Key passphrase即密码&#xff0c;保存至本地。 随后在PuTTY配置ssh的用户名 来Cred…

网络报修心得

文章目录 JNU 网络牛牛有线锐捷跳出不允许开启VPN 为他人代理 JNU 网络牛牛 有线 锐捷跳出不允许开启VPN 为他人代理 问题表现&#xff1a;打游戏开启加速器后&#xff0c;频繁冒出提示&#xff0c;然后频繁下线&#xff0c;但是电脑无线使用正常问题原因&#xff1a;一般是加…

Apache Doris 在小鹅通的应用实践

峰会官网已上线&#xff0c;最新议程请关注&#xff1a;doris-summit.org.cn 点击报名 先到先得 本文导读&#xff1a; 随着网络直播规模的不断扩大&#xff0c;在线知识服务在直播行业中迎来了广阔的发展机遇。小鹅通作为一家以用户服务为核心的技术服务商&#xff0c;通过多平…

【Java学习之道】GUI开发的基本概念

引言 在这一章&#xff0c;我们将一起走进Java的图形用户界面&#xff08;GUI&#xff09;开发的世界。在你阅读完这篇文章后&#xff0c;你将能够了解什么是GUI&#xff0c;以及如何使用Java进行GUI的开发。 一、什么是GUI 首先&#xff0c;让我们来解答一个许多初学者都会…

互联网Java工程师面试题·Java 并发编程篇·第五弹

目录 52、什么是线程池&#xff1f; 为什么要使用它&#xff1f; 53、怎么检测一个线程是否拥有锁&#xff1f; 54、你如何在 Java 中获取线程堆栈&#xff1f; 55、JVM 中哪个参数是用来控制线程的栈堆栈小的? 56、Thread 类中的 yield 方法有什么作用&#xff1f; 57、…

C#开发的OpenRA游戏之金钱系统(1)

C#开发的OpenRA游戏之金钱系统(1) 设计一个游戏,肯定要有一个唯一的资源,用这个资源来管理整个游戏的进度,以及相互争夺的焦点。在OpenRA里,就是使用矿产资源。所以在地图上分布几个矿场,玩家就需要相互争夺矿场,谁开采多谁就更有钱,谁有钱了就可以升级更好的科技,以…

新版WordPress插件短视频去水印小程序源码

最新版去水印小程序源码&#xff0c;本版本全开源&#xff0c;是WordPress插件 上传到Wordpress 安装插件 启动之后 绑定自己的小程序id wordpress可以在宝塔一键部署 也可以用我的这个 搭建前我们需要一下东西&#xff1a; 第一个&#xff1a;一台服务器&#xff08;国内外都可…

深度学习中的激活函数

给定一个线性变换可以把x的值映射到一条直线上&#xff0c;如下图 输出结果就是y1w1xb1 如果y1经过一个线性变换得到一个y2&#xff0c;那么x和y2的关系是什么&#xff1f; 答案&#xff0c;毫无疑问是一条直线&#xff0c;不管如何的线性变换&#xff0c;依旧是一个线性的问…

Android平台轻量级RTSP服务模块编码前后数据源对接探究

技术背景 好多开发者可能有个疑惑&#xff0c;什么时候轻量级RTSP服务&#xff1f;为什么需要有轻量级RTSP服务模块&#xff1f;实际上&#xff0c;轻量级RTSP服务解决的核心痛点是不需要用户额外部署RTSP或者RTMP流媒体服务&#xff0c;实现本地的音视频&#xff08;如摄像头…

openguass数据库描述指令集合(等保)

1、查看数据库是否配置了密码复杂度&#xff0c;密码最小使用长度是否大于8位&#xff0c;密码复杂度的要求是否包含3类不同字符。 A&#xff1a;数据库密码&#xff1a;K~3m5Kzbjf_zDr!^2K)#。满足要求。 2、数据库密码最大使用期限配置是否小于90天。 A&#xff1a;passwor…

把字符串转换成整数[考虑溢出]

把字符串转换成整数 1.不考虑溢出也能过[牛客测试不全面] class Solution { public:int StrToInt(string str) {int answer 0; int isplus 1;for (char& ch : str) { if (ch )isplus 1;else if (ch -)isplus - 1;else{if (ch < 1 || ch > 9)return 0;elsean…

设计模式_命令模式

命令模式 介绍 定义案例问题堆积在哪里解决办法 行为形设计模式 就是把 “发布命令 执行命令”细化为多个角色 每个角色又能继续细化 发布命令 1 打印1-9 a 打印A-G 如果有更多的命令 命令处理方式更加多样性 更复杂 处理命令的顺序拆分角色&#xff1a;降低耦合度 命令类&am…

极简c++(7)类的继承

为什么要用继承 子类不必复制父类的任何属性&#xff0c;已经继承下来了&#xff1b;易于维护与编写&#xff1b; 类的继承与派生 访问控制规则 一般只使用Public&#xff01; 构造函数的继承与析构函数的继承 构造函数不被继承&#xff01; 在创建子类对象的时候&…

Kafka 开启SASL/SCRAM认证 及 ACL授权(三)验证

Kafka 开启SASL/SCRAM认证 及 ACL授权(三)验证。 官网地址:https://kafka.apache.org/ 本文说明如何做client验证ACL是否生效,我们之前开启了无acl信息不允许访问的配置。涉及的client有以下几个场景:shell脚本、python脚本、java应用、flink流。 kafka shell script验证…