C++ 11 委派构造函数

【C++11保姆级教程】列表初始化(Literal types)和委派构造函数(delegating)) C++11引入了许多新的语言特性和标准库扩展,这些变化使得C++编程更加强大和便捷。其中,列表初始化和委派构造函数是C++11中引入的两个重要特性。本文将深入探讨列表初始化和委派构造函数的概念、用法以及示例代码,帮助读者更好地理解和应用这些特性。在上述示例中,我们定义了一个Rectangle(矩形)类,它具有三个构造函数:默认构造函数、边长相同的构造函数和指定宽高的构造函数。在默认构造函数和边长相同的构造函数中,我们使用委派构造函数的方式,将初始化逻辑委派给指定宽高的构造函数。 阅读详情
#include <iostream>

using namespace std;
/* 类 Info 1
class Info
{
public:
	Info() :type(1), name('a')
	{
		InitRest();
	}
	Info(int i) : type(i), name('a')
	{
		InitRest();
	}
	Info(char e) : type(1), name(e)
	{
		InitRest();
	}

private:
	int type;
	char name;
	void InitRest(){}
};
*/
//以上 Info()类的代码,是否可以简化呢? 三个构造函数,除了参数和初始化列表不同,函数体都是一样的
//我们可以将一个构造函数设定为 基准版本 ,比如这里的 Info() 版本的构造函数,而其他构造函数可以通过委派 基准版本 来进行初始化
// C++ 11中的委派构造函数,是在构造函数初始化列表位置进行构造和委派的
//我们将上面Info类的代码进行简化

//类 Info 2
/*
class Info
{
public:
	Info()//这是 基准版本 的构造函数 称之为 “目标构造函数”
	{
		InitRest();
	}
	// 所谓委派构造,就是指委派函数,将构造的任务 委派给了目标构造函数来完成这样一种类构造的方式
	Info(int i) : Info() //这个在初始化列表中使用了 基准版本 的构造函数的 构造函数 就称之为 委派构造函数
	{
		type = i;
	}
	// 注意:委派构造函数 不能有初始化列表,所以成员变量要赋初值,必须放在函数体里
	//Info(char e) :Info(), name(e) //这里报错 error C3511: “Info”: 对委托构造函数的调用应仅为成员初始值设定项
	//{

	//}
	Info(char e) : Info()
	{
		name = e;
	}
	void GetType() { cout << "type = " << type << endl; }
private:
	int type{ 1 };
	char name{ 'a' };
	void InitRest(){ type += 1;};
};
*/

// 上面这个简化,委托构造函数无法使用初始化列表,这里会有一个问题,因为初始化列表是先于构造函数完成的,这可能会使程序犯错
// 所以,我们可以稍微改造一下目标构造函数,使得我们的委派构造函数,依然可以在初始化列表中初始化所有成员
// 类 Info 3
/*
class Info
{
public:
	Info() : Info(1, 'a'){} //委派构造函数 1
	Info(int i) : Info(i, 'a') {} //委派构造函数 2
	Info(char e) : Info(1, e){} //委派构造函数 3

	void GetType(){ cout << "type = " << type << endl; }

private:
	Info(int i, char e) : type(i), name(e)//定义了一个私有的目标构造函数,注意 目标构造函数是先于委派构造函数执行的
	{
		type += 1;
	}
	int type;
	char name;
};
*/
// 而在构造函数比较多的时候,我们可能不止一个委派构造函数,而一些目标构造函数,也有可能是委派构造函数
// 这样一来,我们就可能在委派构造函数中,形成链状的委派构造关系
// 类 Info 4
struct Info
{
	Info() : Info(1) {} //委派构造函数
	Info(int i) : Info(i, 'a') {} // 既是委派构造函数,又是目标构造函数
	Info(char e) : Info(1, e) {}

	void GetType() { cout << "type = " << type << endl; }
private:
	Info(int i, char e) : type(i), name(e) // 委派构造函数 
	{
		type += 1;
	}
	int type;
	char name;
};
// 类 Info 4 中, Info() 委派 Info(int) 进行构造, Info(int) 又委派 Info(int, char)进行构造。
// 在委派构造链中,一定要注意不要形成委托环

int main()
{
	Info f(3); 
	f.GetType();// 这里我们分别用 第2种 Info的定义和第3种Info的定义,输出不一样,这就是会导致问题,而我们实际需要的结果是第3种的输出
	system("pause");
	return 0;
}

注:本篇内容来自于书籍 深入理解C++11 ,如果需要此数,可以留言邮箱地址

C++11委派构造函数的使用方法 在代码开发中,C语言和C++都是基础语言,是很多web开发人员的入门级必学语言。但在C++98 中,类成员构造问题还存在一些问题,为此C++11提出了一些新特性。   C++98中如果一个类有多个构造函数且要实现类成员构造,这些构造函数通常要包含基本相同的类成员构造代码。在坏的情况下,相同的类成员构造语句被拷贝粘贴在每一个构造函数中。   基于C++98中的类成员构造问题,C++11新特性中,程序员可以将公有的类成员构造代码集中在某一个构造函数里,这个函数被称为目标构造函数。其他构造函数通过调用目标构造函数来实现类成员构造,这些构造函数被称为委派构造函数。在该新特性提出之前,构造函数是不能 立即下载

相关推荐

避开PSRR仿真三大坑:用Cadence psspxf分析分频器时,这些设置错了白忙活

本文深入探讨了使用Cadence psspxf工具进行分频器PSRR仿真时常见的三大技术陷阱,包括扰动信号参数设置、收敛性优化和后处理信号提取。通过详细的参数推荐和实战技巧,帮助工程师避免仿真误差,提升PSRR分析效率与准确性,特别适用于16分频器等数字-模拟混合电路设计。

weixin_29258297的博客 301

[c++]委派构造函数

前言 构造函数没有返回值,因此按照语法规则推导:如果在一个构造函数中调用另一个构造函数,仅仅相当于产生一个临时对象,当退出构造函数的时候对象就被销毁了,其实构造函数就是简单的函数,局部变量脱离作用于会直接销毁 。 但是如果在构造函数中使用 new 来调用构造函数并创建对象,那么依旧是可以通过指针来保存对象的。 注:这是很利索当然的逻辑,c/c++程序员如果对指针和内存结构有了解的话,很好理解。好像很多java程序员会尝试这样的动作。 c++11 c++11引入了 委派构造函数 语法。这样便等.

ykun089的博客 519

Mooncake架构:基于KVCache解耦的LLM推理优化方案

在大语言模型推理中,KVCache是Transformer解码过程中用于缓存历史Key/Value向量的核心数据结构,它避免了序列重复计算,但会随上下文长度线性增长,成为显存占用的主要部分。其原理是在自回归生成时,将已计算过的注意力键值对存储下来,供后续Token生成时直接使用,从而提升计算效率。这项技术的核心价值在于,通过高效管理KVCache,可以显著降低长序列推理时的显存压力,提升GPU资源利用率。在实际应用场景中,尤其是在处理长上下文对话、高并发请求时,KVCache的管理策略直接决定了服务的吞吐量

weixin_35753431的博客 534

详解 C++ 委托构造函数

在 C++11 之前,如果类有多个构造函数,通常需要手动编写重复的初始化代码,或将公共的初始化逻辑提取到一个私有成员函数中。C++11 的委托构造函数允许一个构造函数直接。

抟土成人祖,炼石补青天。眼中览银河,手可摘星辰。 1100

(2024,DDPM,DDIM,流匹配,SDE,ODE)扩散:基础教程

本文的目标是尽可能简单地教授扩散。第一节介绍扩散的基本原理。第二节和第三节展示如何构建随机和确定性扩散采样器。第四部分介绍了密切相关的流匹配,可看作是扩散的推广。​第五节,强调实践中最重要的一些设计选择,包括采样器、噪声时间表和参数化方法。

qq_44681809的博客 1万+

UE5在Ubuntu22.04.4下的高效开发环境配置指南

本文详细介绍了在Ubuntu 22.04.4系统上配置UE5高效开发环境的完整指南,包括系统准备、显卡驱动安装、UE5引擎编译与配置、开发工具链设置以及性能优化技巧。通过逐步指导,帮助开发者快速搭建稳定的UE5开发环境,解决常见问题,提升开发效率。

weixin_29251131的博客 383

C++:类的构造函数

构造函数 当我们需要在对象创建时初始化一些数据的时候,我们不可能提供一个普通的成员方法供程序猿在对象创建后调用。因为如果程序猿故意或者无意间忘记了调用该方法,就可能导致程序出现偏离预期的结果。为了防止这种情况的发生,C++中提供了一种特殊的成员函数–构造函数。 声明和定义 构造函数与普通函数在声明与定义上别无二致,除了不需要声明返回值。 在声明中添加如下代码 Student(std::string...

杨杨子江的博客 873

嵌入式开发新思路:用QP框架5步搞定状态机设计(附STM32移植指南)

本文介绍了在嵌入式开发中使用QP框架进行状态机设计的新思路。通过对比传统RTOS与事件驱动模型的差异,详细解析了QP框架的核心组件与优势,并提供了基于STM32的5步实战指南,包括环境搭建、状态机实现与性能优化技巧,帮助开发者从顺序阻塞思维转向高效的事件驱动架构。

milk5的博客 900

关于使用C++11中委托构造函数

今天在读《C++Primer》时读到委托构造函数一节,书中关于委托构造函数是这样描述的: 一个委托构造函数使用它所属的类的其他构造函数执行自己的初始化过程,或者说它把自己的一些(或者全部)职责委托给了其他构造函数。和其他构造函数一样,一个委托构造函数也有一个成员初始值的列表和一个函数体。在委托构造函数内,成员的初始值列表只有一个唯一的入口,就是类名本身。和其他成员初始值一样,类名后面紧跟圆括号括

huangtiao2509的博客 9996

T型三电平逆变器中点电位平衡详解

T型三电平逆变器(T-type Three-Level Inverter)是一种高效的多电平拓扑,相比传统NPC(Neutral Point Clamped)三电平逆变器,具有更低的开关损耗、更高效率和更简单的结构,尤其适用于中功率应用(如光伏逆变器、风电变换器和工业驱动)。(T-type Three-Level Inverter)中的应用已成为当前中高压功率变换领域(如光伏逆变器、储能PCS、电动汽车充电桩、风电并网和工业驱动)的热门方案。针对 T型逆变器,类似 NPC 的零序注入法适用。

专注于前沿技术的探索与实践,热衷于从代码逻辑、架构设计到行业应用等多维度深挖技术本质。期待在技术之路上与你共同成长~ 546

Android 13.0 Launcher3中去掉Hotseat功能实现

在13.0系统产品定制化开发中,在Launcher3的定制化需求也是特别多的,由产品是小屏幕的产品,所以产品需求Launcher3 页面布局的原因,要求Launcher3 需要去掉Hotseat 不显示Hotseat下面几个图标,而做满屏app的显示,从而达到美观的效果,下面就来分析去掉Hotseat从而实现这个功能

安卓兼职framework和app工程师的博客 1328

C++构造函数之委托构造函数

C++构造函数之委托构造函数 C++11新标准扩展了构造函数初始值的功能,所以委托构造函数就出现了,一个委托构造函数使用它所属类的其他构造函数执行它自己的初始化过程,或者说他把自己的一些(或全部)职责委托给了其他构造函数。 1.定义:    和其他构造函数一样,一个委托构造函数也有一个成员初始值列表和一个函数体。在委托构造函数内,成员初始值列表只有一个唯一的入口,就是类名本身。和其他成员初始

eagle_007WH的博客 1万+

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

C++11的委派构造函数

一.目的委派构造函数是C++ 11中对C++的构造函数的一项改进,其目的 也是为了减少程序员书写构造函数的时间。通过委派其他构造函数, 多构造函数的类编写将更加容易。 二.委派构造函数的前因后果class Info { public: Info() : type(1), name('a'){initRest();} Info(int i) : type(i), name('a'){

Hacker的博客 992

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

C++11之委派构造函数

在C++11中,所谓委派构造,就是指委派函数将构造任务委托给某个目标构造函数来完成类构造的一种方式。通俗地讲,就是允许构造函数通过初始化列表方式来调用同一个类中的另一个构造函数。

林夕07 1905

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

C++11 委派构造函数

一 委派构造函数 《深入理解C++11》 委派构造:就是指委派函数将构造的任务派给了目标构造函数来完成这样一种类构造的方式。 C++11中的委派构造函数是在构造函数的初始化列表位置进行构造的、委派的 “基准版本”的构造函数称为目标构造函数,调用“基准版本”的构造函数称为委派构造函数 举例: namespace demo1 { struct A { A() { init()...

程序员Link 328

C++ 11——继承和委派构造函数

继承构造函数 C++ 中自定义类型——类,是C++ 面向对象的基石。类具有可派生性,派生类可以自动获得基类的成员变量和接口。不过基类的非虚函数则无法再被派生类使用了。 如果派生类 要使用基类的构造函数,同城需要在构造函数中显示声明,但是这也带来一个问题:有的时候,我们的基类可能拥有数量众多的不同版本的构造函数,其派生类去构造基类的时候就需要写大量的“透传”构造函数。 struct A { A(int i){} A(double d,int i){} A(float f,int i, const cha

0 error(s) 556

C++11 标准新特性:委派构造函数

https://www.ibm.com/developerworks/cn/rational/1508_chenjing_c11/index.html 陈 晶 2015 年 8 月 11 日发布 WeiboGoogle+用电子邮件发送本页面   1 本文首先介绍了在委派构造函数提出之前类成员构造所面临的问题

sinat_35297665的博客 609

C++11中的委派构造函数

C++11中的委派构造函数: 与继承构造函数类似。委托构造函数也是c++11中对c++的构造函数的一项改进,其目的就是减少程序员写构造函数的时间。通过委派其他构造函数,多构造函数的类编写起来就很简单容易。 比如:原来很冗余的代码 // ConsoleApplication3.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include us

LC_若水微韧的博客 1129

c++11中的委派构造函数

有了委派构造函数,就不用每个构造版本都做同样的初始化工作,只需要不断形参少的委派就行了 以下是《深入理解c++11》中的截图 以下是自己的实现 #include #include #include #include /* 委派构造函数的使用,类似与构造基类 */ class Info { public: Info() { init(); } //Info(in

. 1964

c++11 委派构造函数

委派构造函数可以减少构造函数的书写量: class Info { public: Info() : type(1), name('a') { InitRest(); } Info(int i) : type(i), name('a') { InitRest(); } Info(char e) : type(1),, name(e) { Init...

weixin_30724853的博客 149

C++11中继承构造函数和委派构造函数

1、继承构造函数 在C++继承中,我们可能会遇到下面这个例子 class Base { public: Base(int va) :m_value(va) { } Base(char c) :m_c(c) { } private: int m_value; char m_c; }; class Derived :public Base { private: pu

yp18792574062的博客 3685

C++11 委派构造函数特性怎么使用?

在代码开发中,C语言和C++都是基础语言,是很多web开发人员的入门级必学语言。但在C++98 中,类成员构造问题还存在一些问题,为此C++11提出了一些新特性。C++98中如果一个类有多个构造函数且要实现类成员构造,这些构造函数通常要包含基本相同的类成员构造代码。在最坏的情况下,相同的类成员构造语句被拷贝粘贴在每一个构造函数中。基于C++98中的类成员构造问...

weixin_34025051的博客 159

C++11模板句柄的实现:委派构造函数、default关键字分析

C++11,使用委派构造函数,并且快速初始化变量,default关键字重声明默认构造函数,回复pod状态。分析与推荐用法。 目前为止,VS2012和2013对异常声明的兼容还是停留在代码沟通的级别,没有进行编译类型检查,出现如下错误可忽略。 warning C4290: 忽略 C++ 异常规范,但指示函数不是 __declspec(nothrow) 下为:VS2012不支持委托构

镜子蓝玉的专栏 1726
上一篇: c++继承构造函数
下一篇: gcc/g++ 编译 .cpp文件
qiukapi
博客等级 码龄12年 51粉丝 93原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值