首页
学习
活动
专区
圈层
工具
发布

【C++】构造函数初始化列表 ③ ( 构造函数 的 初始化列表 中 为 const 成员变量初始化 )

构造函数初始化列表 总结 : 初始化列表 可以 为 类的 成员变量 提供初始值 ; 初始化列表 可以 调用 类的 成员变量 类型的 构造函数 进行成员变量初始化操作 ; 初始化列表 可以 使用 构造函数...中传入的 参数 ; 类初始化时 , 根据定义顺序 , 先调用 成员变量的 构造函数 , 然后调用外部类构造函数 , 析构函数正好相反 ; 实例对象 的 const 成员变量 必须只能在 初始化列表 中进行...初始化 , 所有的构造函数都要进行初始化操作 ; 一、构造函数 的 初始化列表 中 为 const 成员变量初始化 1、初始化 const 常量成员 如果 类 中定义了 被 const 修饰 的 成员变量..., 那么该成员变量 必须被初始化 , 否则会报错 ; 对象中的 const 成员 必须在 声明后 立刻进行初始化 ; const 成员的初始化 只能通过 构造函数 的 初始化列表 进行初始化 ; 注意..., 对 常量成员 进行初始化操作 ; 3、正确代码示例 - 在初始化列表中初始化常量成员 在下面的 类 B 中 , 所有的 构造函数 中 , 都要使用 初始化列表 初始化 常量成员 , 只要遗漏一个构造函数

1.1K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【C 语言】使用 “ 初始化列表 “ 方式创建 “ 匿名变量 “ ( C 语言中的 “ 匿名变量 “ 概念 | “ 初始化列表 “ 语法 | 代码示例 )

    一、使用初始化列表方式创建匿名变量 1、C 语言中的 " 匿名变量 " 概念 在 C 语言中 , “匿名变量” 指的是 在 表达式中 直接创建 和 初始化变量 , 不为该变量指定显式的变量名 ; C 语言..." 初始化列表 " 语法 ; 2、" 匿名变量 " 使用场景 一次性使用 : " 匿名变量 " 通常在一次性操作场景中使用 , 避免定义额外的变量名 , 仅在本表达式中生效 , 该表达式执行完毕后 ,..., 或者 函数参数传递时 , 经常使用到 匿名变量 ; 3、" 初始化列表 " 语法 在 C 语言中 , 使用初始化列表方式创建 " 匿名变量 " , 该方式 在表达式中 直接定义 和 初始化变量 ,..., x 和 y ; struct Point { int x; int y; }; 使用 初始化列表 方式 创建 结构体类型的匿名变量 ; struct Point point = (...struct Point){ .x = 5, .y = 3 }; 3、创建 数组类型 匿名变量 使用 初始化列表 方式创建的 数组类型的 匿名变量 , 这个匿名变量可以传入到 函数 中作为参数 ; (int

    41110

    【Flutter】Dart 面向对象 ( 类定义 | 类的继承 | 私有变量 | 可选参数 | 默认参数 | 初始化列表 )

    文章目录 一、 Dart 面向对象 二、 类定义 三、 类的继承 四、 私有变量 五、 可选参数与默认参数 六、 初始化列表 七、 完整代码示例 八、 相关资源 一、 Dart 面向对象 ---- OOP...---- 初始化列表 : 冒号后面的内容就是初始化列表 , 父类构造器也是初始化列表 , 除了父类构造方法之外 , 还可以在子类构造方法体之前初始化示例变量 , 不同的初始化实例变量之间使用逗号隔开...; // 初始化列表 : 冒号后面的内容就是初始化列表 // 父类构造器也是初始化列表 // 除了父类构造方法之外 , 还可以在子类构造方法体之前初始化示例变量...// 不同的初始化实例变量之间使用逗号隔开 // 父类构造方法 : 如果父类没有默认构造方法 (无参构造方法) , // 必须在初始化列表中调用父类构造函数...= "北京"} 指定了如果用户不初始化 city 变量, 那么为其初始化 "北京" 字符串值 // 初始化列表 : 冒号后面的内容就是初始化列表 // 父类构造器也是初始化列表

    2.4K00

    C++ Json 变量的初始化

    参考链接: C++ : List的不同初始化方法 1、从字符串 解析     [cpp]     view plain     copy    int ParseJsonFromString()   {...,我一开始理解成跟c++中List,都是用下标去访问,但是这个中间有个问题:比如谁一个json的数字变量a,你要获取第一个数组中的元素给b,不能直接用b=a[0],而是得先定义一个int i=0;b=a...[i],不然编译的时候会报错,不知道这是为什么,网上也没找到对应说明,如果哪位大神看到的话留言解答一下吧,谢谢~     [html]     view plain     copy    Json::...);             std::cout器             ...=arrayObj.size()-1)                     std::cout<<std::endl;;             }         }      不含迭代器的方法:

    2.5K20

    C++类成员函数默认参数和成员变量初始化问题

    总结如下: (1)类的成员变量在定义时候可以初始化,当然静态成员变量不行。 (2)类的成员函数默认参数需要在头文件声明里面指定,在定义函数时候不能指定。...如果同时在声明和定义里面指定的话会报错,重定义参数。如果只在定义时候指定,但是声明时候不指定,编译不会报错,但是传递参数一个会报错,因此还是必须要在声明时候指定。...即 (1)声明指定,定义不指定,这个是正常的 (2)声明指定,定义也指定,报错重定义参数 (3)声明不指定,定义指定,编译不报错,但是无法使用默认参数 (4)声明不指定,定义不指定,这就是我们说的无默认的参数函数

    7500

    【C++】构造函数初始化列表 ① ( 类对象作为成员变量时的构造函数问题 | 构造函数初始化列表语法规则 )

    就是 C++ 中的 构造函数 初始化列表 ; 2、错误代码示例 代码示例 : #include "iostream" using namespace std; class A { public: /...========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ========== 二、构造函数初始化列表 ---- 1、构造函数初始化列表语法规则 在 C++ 语言中 , 构造函数初始化列表...是一种用于初始化类的成员变量的方法 ; 构造函数初始化列表 可实现功能 : 为成员变量提供初始值 调用其他 成员变量的 构造函数 来初始化成员变量 构造函数初始化列表语法规则 : 构造函数() : 成员变量名称...(成员变量值) , 成员变量名称(成员变量值) { // 构造函数内容 } 构造函数初始化列表 位置在 构造函数 的 参数列表之后 , 冒号 : 与花括号 {} 之间 ; 使用 逗号 , 分隔 ;...初始化列表中的元素由 成员变量的名称 和 初始值组成 , 使用等号 = 连接 ; 在下面的代码中 , 为 B 类定义了默认的构造函数 , 其中定义了 构造函数 初始化列表 ; 在 初始化列表中 , m_age

    1.5K30

    java与C++变量初始化的对比

    java尽力保证:所有变量在使用前都能得到恰当的初始化 ①函数/方法局部变量的初始化 在C/C++中,变量的初始化还是得依赖于程序员的自觉性。...对于函数局部变量,编译器不会为基本类型赋予默认初始值,新手经常会使用未初始化的指针访问内存,导致程序崩溃。对于类对象,编译器将使用类的默认构造函数对对象进行初始化。...而在java中,对于方法的局部变量,java以编译时错误来保证变量在使用前都能得到恰当的初始化。...所以C++数据成员的初始值,只能依赖: 成员初始化列表 构造函数 成员初始化列表与java的指定初始化相似,也是在进入构造函数函数体之前,对数据成员进行的初始化。...java尽力保证:所有变量在使用前都能得到恰当的初始化(《java编程思想》) java在变量初始化上,普通变量以编译错误、成员变量以默认初始化等手段,尽力使所有的变量在使用前都可得到初始化,在安全性上大大强于

    1.2K30

    C++中变量自动初始化的问题

    C++中有一些变量在如果没有赋初值会被编译器自动赋值为0,但有的变量又不会这样,而得到一个随机数,下面具体讨论一下: 首先看一下C++中的几个存储区: 1、栈区:由编译器自动分配释放 ,存放函数的参数值...3、全局区(静态区)(static):全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。...在上述的几个存储区域中,如果定义在全局区的变量没有被用户初始化的话,编译器会自动将其初始化为0。 这里要非常注意定义两个字而不是声明。...再来看一下定义和声明的区别:从编译原理上来说,声明是仅仅告诉编译器,有个某类型的变量会被使用,但是编译器并不会为它分配任何内存。而定义就是分配了内存。...结论:一些全局变量(不管用没用static修饰)或者是使用static中修饰的局部变量在定义的时候都会被编译器自动初始化为0,而在声明的时候任何变量都不会被编译器自动初始化。

    1.8K70

    【C++】构造函数初始化列表 ② ( 构造函数 为 初始化列表 传递参数 | 类嵌套情况下 的 构造函数 析构函数 执行顺序 )

    一、构造函数 为 初始化列表 传递参数 1、构造函数参数传递 构造函数 初始化列表 还可以使用 构造函数 中的参数 ; 借助 构造函数 中的参数列表 , 可以为 初始化列表 传递参数 ; 在下面的代码中..., B 类的 有参构造函数 , 传入了 3 个参数 , 这三个参数都不在函数体中使用 , 而是在 参数列表中使用 , // 构造函数中的参数可以作为 B(int age, int ageOfA,..., 执行了 A 的构造函数 ; 类 B 中还定义了 有参构造函数 , 接收 3 个参数 , 分别作为 m_age 成员的值 , 和 A 类型成员对象的 有参构造函数 的 2 个参数 , 这是 使用了...int m_age; // 年龄 A m_a; // A 类型成员变量 }; int main() { // 通过 B 的有参构造函数 // 其中 构造函数中的参数 作为 参数列表 中的参数值..., 先执行 被组合对象 A 的构造函数 , 如果 被组合对象 有多个 , 则 按照 成员变量 的定义顺序 进行初始化 ; 注意 : 此处 不是按照 初始化列表 的顺序 进行初始化 ; 析构函数执行顺序

    93130

    C++引用作函数参数 | 传送变量的别名

    C++引用作函数参数 C++之所以增加引用类型,主要是把它作为函数参数,以扩充函数传递数据的功能。  小林在之前的推文中介绍过函数参数传递的两种情况。...传递变量的指针,形参是指针变量,实参是一个变量的地址,调用函数时,形参指向 实参变量单元。...C++的这种虚实结合的方法仍然是值传递方式,只是实参的值是变量的地址而已,C++提供了向函数传递数据的第3种方法:传送变量的别名。 经典案例:C++实现传送变量的别名。...留个问题给读者思考,这种传送变量的别名和使用指针变量作形参时有什么区别?...以上,如果你看了觉得对你有所帮助,就给小林点个赞叭,这样小林也有更新下去的动力,跪谢各位父老乡亲啦~ C++引用作函数参数 | 传送变量的别名 更多案例可以go公众号:C语言入门到精通

    1.8K88

    C++构造函数体内赋值与初始化列表的区别

    1.C++构造函数初始化列表处提示出现 error: expected ‘{’ before ‘this’ 问题描述下: Linux环境运行,使用g++编译,贴上如下代码出错处已标注于代码中。...在得知网友点拨后,才知道其原因是类对象完成初始化之前,类对象还未成形,不能使用this指针。以上问题的解决方案就是去掉this。...---- 2.初始化列表中不能使用this,那构造函数体内是否可以使用this呢?...答案是,当然可以,因为构造函数对成员数据的初始化在是在初始化列表中完成的,构造函数体内对数据成员所做的工作仅仅是赋值操作,在此之前,类成员数据已经完成了初始化工作,是由其默认构造函数完成的。...所以,这也是编程原则中尽量使用初始化列表的原因。

    1K20

    C语言结构体类型定义+结构体变量的定义与使用及其初始化+结构体变量作为函数参数

    上一篇文章:返回指针值的函数+指向函数的指针+main()函数的参数 C语言结构体类型定义+结构体变量的定义与使用及其初始化+结构体变量作为函数参数 结构体 引例 结构体变量的定义 结构体变量的使用...结构体变量作为函数参数 结构体变量的初始化 下一篇文章 结构体 引例 输出平均分最高的学生信息 #include struct student { int num; char name...int main() { struct date year; year.year = 1980; } 1234567891011 结构体变量的使用 使用形式为:结构体变量.结构体成员名...stu2 结构体变量作为函数参数 结构体变量的成员作为函数的实参,形参为普通变量或数组 也可以将结构体变量作为函数的参数 例如:(请看代码中的详细注释,并观察运行结果) #include <stdio.h...} 1234567891011121314151617181920212223242526272829303132333435363738394041 结构体变量的初始化 结构体变量的初始化一般形式为

    2.9K20

    C++那些事之类成员初始化列表中的注意事项

    C++那些事之类成员初始化列表中的注意事项 在C++中,类的正确初始化是确保程序正常运行的关键步骤之一。尤其是在使用初始化列表时,我们需要注意一些潜在的陷阱,以避免在代码执行过程中产生意外的结果。...初始化列表通常被认为是设置新类实例状态的首选方法,因为它提供了一种简洁、高效的方式来初始化类成员。然而,有时候在初始化列表中引用其他成员变量可能导致一些令人困惑的问题。...length_; int capacity_; int size_; }; int main() { Foo foo(50); foo.print(); } 在这个例子中,我们试图通过初始化列表中引用其他成员变量的方式来初始化...然而,由于类成员的初始化顺序是按照它们在类中声明的顺序进行的,可能导致length_与capacity_并没有按照我们期望的方式初始化。 如何解决?...为了避免这种问题,应该遵循以下几点: 1.避免在初始化列表中引用其他成员变量 2.顺序一致性:成员变量的初始化顺序是按照它们在类中声明的顺序 修正示例: #include class

    23710

    C++核心准则ES.28: 使用lambda表达式进行变量的复杂初始化,特别是常量变量

    ES.28: Use lambdas for complex initialization, especially of const variables ES.28: 使用lambda表达式进行变量的复杂初始化...,特别是常量变量 Reason(原因) It nicely encapsulates local initialization, including cleaning up scratch variables...这种方式漂亮地封装了局部初始化,包括清理只在初始化过程中需要的临时变量,而不是生成一个不必要的非局部但却不会重用的函数。它也可以用于应该是常量但却需要某些初始化处理的变量初始化....如果可能,将条件压缩为一个由可选项(例如枚举)构成的简单集合并且不要将选择和初始化混用。 Enforcement(实施建议) Hard. At best a heuristic....最好是启发式的。寻找没有初始化的变量的后面跟着为其赋值的循环的情况.

    84830
    领券