网站编辑岗位,wordpress更换编辑器,模板 网站 教程,完整html网页代码案例简介#xff1a; CSDN博客专家#xff0c;专注Android/Linux系统#xff0c;分享多mic语音方案、音视频、编解码等技术#xff0c;与大家一起成长#xff01; 优质专栏#xff1a;Audio工程师进阶系列【原创干货持续更新中……】#x1f680; 人生格言#xff1a; 人生… 简介 CSDN博客专家专注Android/Linux系统分享多mic语音方案、音视频、编解码等技术与大家一起成长 优质专栏Audio工程师进阶系列【原创干货持续更新中……】 人生格言 人生从来没有捷径只有行动才是治疗恐惧和懒惰的唯一良药. 更多原创,欢迎关注Android系统攻城狮 1.前言 本篇目的理解C之委托构造函数用法。 2.C之委托构造函数介绍
委托构造函数是C11引入的一个特性允许某个构造函数在初始化列表中调用同一个类中的其他构造函数。这样可以避免代码重复提高代码的可维护性和重用性。
在C中一个类可以有多个构造函数每个构造函数负责初始化对象的不同部分或者提供不同的参数选项。在某些情况下多个构造函数会有一些共同的初始化代码这就会导致代码冗余。委托构造函数解决了这个问题让一个构造函数可以重用其他构造函数的初始化代码。
委托构造函数的语法非常简单就是在构造函数的初始化列表中使用其他构造函数的调用。具体来说委托构造函数的语法如下
class ClassName {
public:ClassName(参数列表) : 构造函数调用 {// 初始化代码}
};在上面的语法中构造函数调用就是委托给其他构造函数的调用。 使用委托构造函数的一些注意事项
委托构造函数只能在初始化列表中调用不能在构造函数的函数体内部调用。委托构造函数的调用必须放在构造函数的初始化列表的最开始。一个类可以有多个委托构造函数它们之间可以相互调用。如果委托构造函数没有给出初始化列表那么默认会调用隐式的默认构造函数。委托构造函数的调用顺序和委托的顺序无关只与初始化列表中的顺序有关。
3.实例
v1.0
#include iostream
#include stringclass 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 stringclass 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。