当前位置:首页 > 科技  > 软件

C++14中的成员初始值设定项与聚合功能详解

来源: 责编: 时间:2023-11-20 08:58:13 407观看
导读一、引言C++14作为C++语言的一个重要版本,引入了许多新的特性和功能,其中包括成员初始值设定项(Member Initializer List)和聚合(Aggregate)。这些特性在提高代码的可读性和灵活性方面起到了重要作用。本文将详细介绍这两个

一、引言

C++14作为C++语言的一个重要版本,引入了许多新的特性和功能,其中包括成员初始值设定项(Member Initializer List)和聚合(Aggregate)。这些特性在提高代码的可读性和灵活性方面起到了重要作用。本文将详细介绍这两个特性及其在C++14中的应用。ZxN28资讯网——每日最新资讯28at.com

ZxN28资讯网——每日最新资讯28at.com

ZxN28资讯网——每日最新资讯28at.com

二、成员初始值设定项(Member Initializer List)

1.成员初始值设定项的定义

成员初始值设定项是一种在构造函数初始化列表中指定成员变量初始值的方法。通过在构造函数初始化列表中列出成员变量及其初始值,可以确保成员变量在构造函数的主体部分被初始化。ZxN28资讯网——每日最新资讯28at.com

2.成员初始值设定项的语法

成员初始值设定项的语法如下:ZxN28资讯网——每日最新资讯28at.com

class MyClass {  public:      int a;      double b;      MyClass(int x, double y) : a(x), b(y) {} // 成员初始值设定项  };

ZxN28资讯网——每日最新资讯28at.com

在上述示例中,MyClass有两个成员变量a和b,它们的初始值通过构造函数初始化列表进行设定。这种方式的初始化可以确保成员变量在构造函数主体部分执行之前被正确初始化。ZxN28资讯网——每日最新资讯28at.com

3.成员初始值设定项的注意事项

  • 成员初始值设定项必须按照成员变量在类中声明的顺序进行初始化。
  • 如果成员变量是内置类型,则不需要使用成员初始值设定项进行初始化。
  • 如果成员变量是常量或引用类型,则不能在成员初始值设定项中进行初始化。

三、聚合(Aggregate)

1.聚合的定义

聚合是一种特殊的类类型,它允许将多个变量组合成一个单一的实体。聚合的特点是它们没有构造函数、析构函数或任何虚函数。聚合只能包含其他聚合类型的成员,并且不能包含类类型的成员。ZxN28资讯网——每日最新资讯28at.com

2.聚合的语法

聚合的语法如下:ZxN28资讯网——每日最新资讯28at.com

struct MyAggregate {      int a;      double b;  };

ZxN28资讯网——每日最新资讯28at.com

在上述示例中,MyAggregate是一个聚合类型,它包含了两个整型变量a和b。由于MyAggregate是一个聚合类型,因此它不能包含构造函数、析构函数或虚函数。ZxN28资讯网——每日最新资讯28at.com

3.聚合的注意事项

  • 聚合不能包含类类型的成员,只能包含其他聚合类型的成员。
  • 聚合不能包含构造函数、析构函数或虚函数。如果聚合类型需要析构函数或虚函数,则必须声明一个类类型的成员。

四、代码示例与讲解(示例代码:使用成员初始值设定项和聚合)

下面是一个使用成员初始值设定项和聚合的示例代码:ZxN28资讯网——每日最新资讯28at.com

#include <iostream>  using namespace std;    // 定义一个聚合类型 MyAggregate  struct MyAggregate {      int a;      double b;  };    // 定义一个类 MyClass,该类包含一个聚合类型的成员和一个使用成员初始值设定项初始化的成员变量。  class MyClass {  public:      MyAggregate agg = {10, 20.5}; // 定义一个聚合类型的成员变量 agg,并使用成员初始值设定项初始化它的成员变量 a 和 b。      int c = 30; // 定义一个整数类型的成员变量 c,并使用成员初始值设定项将其初始化为30。  };    int main() {      MyClass obj; // 创建一个 MyClass 类型的对象 obj。      cout << "agg.a: " << obj.agg.a << endl; // 输出 obj 的聚合类型成员变量 agg 的成员变量 a 的值。      cout << "agg.b: " << obj.agg.b << endl; // 输出 obj 的聚合类型成员变量 agg 的成员变量 b 的值。      cout << "c: " << obj.c << endl; // 输出 obj 的整数类型成员变量 c 的值。      return 0;  }

ZxN28资讯网——每日最新资讯28at.com

以下是代码的讲解:ZxN28资讯网——每日最新资讯28at.com

MyAggregate agg; 定义了一个名为 agg 的 MyAggregate 类型的成员变量。由于 MyAggregate 是聚合类型,所以它不能包含构造函数,我们需要使用成员初始值设定项来初始化它的成员变量。ZxN28资讯网——每日最新资讯28at.com

MyAggregate agg = {10, 20.5}; 这里我们使用了成员初始值设定项来初始化 agg 的成员变量 a 和 b。我们可以通过在 = 后面直接跟上初始化列表来给聚合类型的成员变量进行初始化。初始化列表中的顺序必须与聚合类型成员变量在定义时的顺序相同。ZxN28资讯网——每日最新资讯28at.com

int c = 30; 这里我们定义了一个名为 c 的整数类型成员变量,并使用成员初始值设定项将其初始化为30。ZxN28资讯网——每日最新资讯28at.com

五、结论

通过使用成员初始值设定项和聚合功能,我们可以更加灵活地管理类中的成员变量。成员初始值设定项允许我们在构造函数初始化列表中指定成员变量的初始值,而聚合功能则允许我们将多个变量组合成一个单一的实体。这些特性使得代码更加简洁、可读性更强且更加灵活。ZxN28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-31014-0.htmlC++14中的成员初始值设定项与聚合功能详解

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: C++ 20类型转换指南:使用场景与优秀实践

下一篇: 快速创建高效REST API的十个要点解析

标签:
  • 热门焦点
  • Mate60手机壳曝光 致敬自己的经典设计

    8月3日消息,今天下午博主数码闲聊站带来了华为Mate60的第三方手机壳图,可以让我们在真机发布之前看看这款华为全新旗舰的大致轮廓。从曝光的图片看,Mate 60背后摄像头面积依然
  • 对标苹果的灵动岛 华为带来实况窗功能

    继苹果的灵动岛之后,华为也在今天正式推出了“实况窗”功能。据今天鸿蒙OS 4.0的现场演示显示,华为的实况窗可以更高效的展现出实时通知,比如锁屏上就能看到外卖、打车、银行
  • 印度登月最关键一步!月船三号今晚进入环月轨道

    8月5日消息,据印度官方消息,月船三号将于北京时间今晚21时30分左右开始近月制动进入环月轨道。这是该探测器能够成功的最关键步骤之一,如果成功将开始围
  • 28个SpringBoot项目中常用注解,日常开发、求职面试不再懵圈

    前言在使用SpringBoot开发中或者在求职面试中都会使用到很多注解或者问到注解相关的知识。本文主要对一些常用的注解进行了总结,同时也会举出具体例子,供大家学习和参考。注解
  • 之家push系统迭代之路

    前言在这个信息爆炸的互联网时代,能够及时准确获取信息是当今社会要解决的关键问题之一。随着之家用户体量和内容规模的不断增大,传统的靠"主动拉"获取信息的方式已不能满足用
  • 自动化在DevOps中的力量:简化软件开发和交付

    自动化在DevOps中扮演着重要角色,它提升了DevOps的效能。通过自动化工具和方法,DevOps团队可以实现以下目标:消除手动和重复性任务。简化流程。在整个软件开发生命周期中实现更
  • 从零到英雄:高并发与性能优化的神奇之旅

    作者 | 波哥审校 | 重楼作为公司的架构师或者程序员,你是否曾经为公司的系统在面对高并发和性能瓶颈时感到手足无措或者焦头烂额呢?笔者在出道那会为此是吃尽了苦头的,不过也得
  • 2023年,我眼中的字节跳动

    此时此刻(2023年7月),字节跳动从未上市,也从未公布过任何官方的上市计划;但是这并不妨碍它成为中国最受关注的互联网公司之一。从2016-17年的抖音强势崛起,到2018年的&ldquo;头腾
  • iQOO Neo8 Pro即将开售:到手价3099元起 安卓性能最强旗舰

    5月23日,iQOO如期举行了新品发布会,全新的iQOO Neo8系列也正式与大家见面,包含iQOO Neo8和iQOO Neo8 Pro两个版本,其中标准版搭载高通骁龙8+,而Pro版更
Top