C++(成员变量初始化)

news/发布时间2024/8/25 17:19:02

1. 就地初始化、初始化列表

在C++中,成员变量可以通过就地初始化和初始化列表进行初始化。

  1. 就地初始化:在C++11及更高版本中,可以在声明成员变量时直接进行初始化。例如:

    class MyClass {
    public:int x = 5; // 就地初始化
    };
    

    这样,在创建 MyClass 类的对象时,x 成员变量会被初始化为5。

  2. 初始化列表:在构造函数中使用初始化列表来初始化成员变量。例如:

    class MyClass {
    public:int x;MyClass() : x(5) {} // 初始化列表
    };
    

    在这个例子中,构造函数 MyClass() 使用初始化列表 : x(5) 来初始化 x 成员变量为5。初始化列表可以在构造函数的参数列表之后使用冒号 : 开始,并按照成员变量的声明顺序列出初始化语句。

通常来说,就地初始化更为简洁,而初始化列表则更为灵活,可以在构造函数中对多个成员变量进行复杂的初始化操作。



2. 必须使用初始化列表的场景

有一些情况下,必须使用初始化列表对成员变量进行初始化,而不能使用就地初始化或在构造函数内进行赋值操作。这些情况通常涉及到成员变量是 const 类型、引用类型或者属于基类的情况。下面分别举例说明:

  1. const 类型成员变量const 类型的成员变量必须在对象构造时进行初始化,并且只能通过初始化列表来初始化。

    class MyClass {
    public:const int x;MyClass(int value) : x(value) {} // 必须使用初始化列表
    };
    
  2. 引用类型成员变量:引用类型成员变量必须在对象构造时绑定到一个对象,因此只能通过初始化列表来初始化。

    class MyClass {
    public:int& x;MyClass(int& ref) : x(ref) {} // 必须使用初始化列表
    };
    
  3. 基类成员变量:如果类中包含一个基类,而基类没有默认构造函数,那么在派生类的构造函数中必须使用初始化列表来调用基类的构造函数。

    class Base {
    public:Base(int value) {}
    };class Derived : public Base {
    public:Derived(int value) : Base(value) {} // 必须使用初始化列表
    };
    

在这些情况下,使用初始化列表是必须的,因为这些特殊类型的成员变量在对象构造时需要特殊处理,而且它们不能在构造函数的函数体内进行赋值。



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

如若内容造成侵权/违法违规/事实不符,请联系连锁易网进行投诉反馈email:xxxxxxxx@qq.com,一经查实,立即删除!

相关文章

DBeaver Public Key Retrieval is not allowed

最近由于navicat到期了,没续了。打算用用dbeaver。dbeaver是免费和开源(GPL)为开发人员和数据库管理员通用数据库工具。家用完全足够了。但是在配置数据库连接的时候遇到错误:DBeaver连接MySQL提示“Public Key Retrieval is not allowed”。Public Key Retrieval is not a…

linux系统查看磁盘分区的文件系统类型

df -T 只可以查看已经挂载的分区和文件系统类型。[root@192 ~]# df -Tfdisk -l 可以显示出所有挂载和未挂载的分区,但不显示文件系统类型。parted -l 可以查看未挂载的文件系统类型,以及哪些分区尚未格式化。lsblk -f 也可以查看未挂载的文件系统类型。最为直观file -s /dev/…

burpsuit+adb+逍遥模拟器

安卓7之后,单纯的将burpsuit的证书导出手动安装到模拟器中已经不行了,app可以只信任指定证书和系统内置的证书,后续用户安装的证书是不生效的,只能想办法装到系统内部 需要将证书通过openssl转换成pem形式,在哦通过adb将文件push到系统目录下才可绕过app的证书检测 adb下载…

翻译,师爷师爷什么叫事务!

当我们学习 apple 时候,我们很容易记住 apple 是什么。 我们也不会对 apple 的概念产生模糊混淆。 为什么? 因为字典上明确说了,apple = 苹果。 那苹果是什么? 苹果就是圆圆的红红的,吃起来甜甜的水果。 我们学习 apple 如此简单,就是因为我们对苹果这个概念的理解已经通…

项目中和兄弟部门难以高效协作?你需要注意这四点

在组织架构日益复杂的今天,靠一个人单打独斗完成工作或项目越来越难,也越来越不可能。不知你是否留意过,无论招聘什么岗位,几乎所有企业都在强调“团队合作”。 这里的团队不光指的是同部门协作,要包括公司内部的跨部门合作,甚至是跨公司与客户团队一起工作。 我们往往会…

P1149 [NOIP2008 提高组] 火柴棒等式

[NOIP2008 提高组] 火柴棒等式 题目描述 给你 \(n\) 根火柴棍,你可以拼出多少个形如 \(A+B=C\) 的等式?等式中的 \(A\)、\(B\)、\(C\) 是用火柴棍拼出的整数(若该数非零,则最高位不能是 \(0\))。用火柴棍拼数字 \(0\sim9\) 的拼法如图所示:注意:加号与等号各自需要两根火…

Android家庭记账本开发第三天:MainActivity主界面逻辑文件

昨天讲了主界面的xml文件的布局,这里讲一下对应的主界面的Java文件,首先上代码:1 package com.example.myapplication3;2 3 import android.annotation.SuppressLint;4 import android.content.Intent;5 import android.database.Cursor;6 import android.database.sqlite.S…

DrawCall性能优化

原文地址 https://thegamedev.guru/unity-performance/draw-call-optimization/#wait-whats-a-draw-call 目录什么是DrawCallBatches vs SetPassesCounting Unity Draw CallsFight the Battle: Batching Unity Draw CallsRequirement: Merging Unity MaterialsTechnique 1: Uni…

【算法】007_前缀树和贪心算法

1. 前缀树 一个字符串类型的数组arr1,另一个字符串类型的数组arr2.arr2中有哪些字符,是arr1中出现的?arr2中有哪些字符是作为arr1中某个字符串前缀出现的?arr2中有哪些字符是作为arr1中某个字符串前缀出现的?pass:表示当前这个结点被经过的次数end:这个结点作为结尾的次…

ls -l 第一位 文件类型 gokcehan/lf 颜色

Symbol File Type– regular filed directoryl symbolic linkp named pipec character device, e.g., /dev/tty1b block device, e.g., /dev/sda2ssocket 默认 lf 颜色主要取自 GNU dircolors 默认值。这些默认值使用 8 种基本颜色和粗体属性。具有背景颜色的默认 dircolors 条…

双塔模型总结

双塔模型介绍 由于进入召回/粗排的候选数目比精排多很多,召回/粗排无法做的很精排一样复杂。现在业内比较通用的方案是采用双塔模型,左边塔建模user embedding,右边塔建模item embedding,由于用户的行为经常发生变化,user tower需要经常更新,但是item状态很少发生变化,可…

hdu5213

我们看到双区间询问,可以想一下怎么转换成单区间询问这个用容斥原理写也非常简单 \(f(L,V)\)指的是\(f(L,U-1)\)和\(f(R+1,V)\)指的是会发现中间被多减了一次,所以加回来有\(f(R+1,U-1)\) 于是就转换成了单区间询问 题目没有对序列进行修改,所以可以离线处理所有询问,使用莫…

weblogic

1.弱口令 weblogic后台地址:ip:7001/console 常用弱口令: system:passwordweblogic:weblogicadmin:secruityjoe:passwordmary:passwordsystem:sercuritywlcsystem: wlcsystemweblogic:Oracle@123 2.任意文件上传漏洞(CVE-2018-2894)[部署war包,getshell] 漏洞原理:Weblog…

【Python】使用Python库中的pymysql执行SQL

使用Python连接数据库 在使用petl执行SQL之前,我们需要先连接到数据库。这里以MySQL为例,我们可以使用pymysql库来连接MySQL数据库。首先,安装pymysql库: pip install pymysql然后,编写以下代码来连接MySQL数据库: import pymysql from petl import *# 连接数据库 conn =…

读十堂极简人工智能课笔记05_无监督学习

无监督学习1. 自我改善 1.1. 只有学会了如何学习和改变的人,才称得上是受过教育的人 1.1.1. 卡尔罗杰斯 1.2. 人工智能如果只是学习纯理论的游戏(从国际象棋和围棋到电脑游戏),其结果已然可以令人惊叹 1.3. 让大多数机器人玩叠叠乐游戏(用积木搭成塔,慢慢从塔中抽出积木,…

汽车传感器类型图例

汽车传感器类型图例 在某种程度上,车辆传感器是车辆的感觉器官。作为电子管理系统的基本组成部分,它们必须记录物理或化学变量,并将其转换为电信号… 近年来,不同类型的传感器数量激增。在安全和方便的物理科学领域,人们特别看到了许多新型的传感元件。 从本质上讲,传感器…

AtCoder Beginner Contest 341-F

AtCoder Beginner Contest 341-F F - Breakdown Problem 给你一个由 \(N\) 个顶点和 \(M\) 条边组成的简单无向图。每个顶点拥有权重\(W_i\),并且被放置了\(A_i\)个棋子。 只要图形上还有棋子,就重复下面的操作:首先,从图形中选择一个(有棋子的)顶点\(x\)并移除一个棋子。…

免费的虚拟主机还不错

免费的虚拟主机和免费云服务器还不错的阿贝云 https://www.abeiyun.com,

空指针对数据成员的访问

前两个test1,2在函数体内没有对结构体内的数据成员进行访问 第三个test3访问_data是使用了this指针进行访问的,即this->_data; 当传递空指针时,只要成员函数内部没有涉及到对象的数据成员访问,都可以正常执行
推荐文章