首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

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

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

18630

C++构造函数初始化列表

构造函数一项重要功能是对成员变量进行初始化,为了达到这个目的,可以构造函数函数对成员变量一一赋值,还可以采用初始化列表。...C++构造函数初始化列表使得代码更加简洁,请看下面的例子: #include using namespace std; class Student{...15,成绩是92.5李华年龄是16,成绩是96 如本例所示,定义构造函数时并没有函数对成员变量一一赋值,其函数体为空(当然也可以有其他语句),而是函数首部与函数体之间添加了一个冒号:,后面紧跟...成员变量赋值顺序由它们声明顺序决定, Demo 类,我们先声明 m_a,再声明 m_b,所以构造函数和下面的代码等价: Demo::Demo(int b): m_b(b), m_a...obj 栈上分配内存,成员变量初始值是不确定初始化 const 成员变量 构造函数初始化列表还有一个很重要作用,那就是初始化 const 成员变量。

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

C++构造函数初始化列表 ⑤ ( 匿名对象 生命周期 | 构造函数 不能调用 构造函数 )

构造函数初始化列表 总结 : 初始化列表 可以 为 类 成员变量 提供初始值 ; 初始化列表 可以 调用 类 成员变量 类型 构造函数 进行成员变量初始化操作 ; 初始化列表 可以 使用 构造函数...传入 参数 ; 类初始化时 , 根据定义顺序 , 先调用 成员变量 构造函数 , 然后调用外部类构造函数 , 析构函数正好相反 ; 实例对象 const 成员变量 必须只能在 初始化列表 中进行...初始化 , 所有的构造函数都要进行初始化操作 ; 构造函数 不能调用 构造函数 ; 一、匿名对象 生命周期 1、匿名对象 生命周期 说明 调用 类名(构造函数参数) 创建是 匿名对象 ; 匿名对象...二、构造函数 调用 构造函数 ---- 1、构造函数 不能调用 构造函数 构造函数 调用 构造函数 是危险行为 ; 构造函数 调用 构造函数 , 并不会为本对象进行初始化操作 ; 构造函数 调用方式...执行 Student 构造函数" << endl; } 然后 , 无参 构造函数 , 调用 有参构造函数 ; // 构造函数 调用 构造函数 是危险行为 Student() { /

18520

C++构造函数初始化列表

构造函数初始化列表以一个冒号开始,接着是以逗号分隔数据成员列表,每个数据成员后面跟一个放在括号初始化式。例如: ? 上面的例子两个构造函数结果是一样。...上面的构造函数(使用初始化列表构造函数)显式初始化成员;而没使用初始化列表构造函数是对类成员赋值,并没有进行显式初始化。...1.内置数据类型,复合类型(指针,引用)- 成员初始化列表和构造函数体内进行,性能和结果上都是一样 2.用户定义类型(类类型)- 结果上相同,但是性能上存在很大差别。...因为类类型数据成员对象进入函数体前已经构造完成,也就是说成员初始化列表处进行构造对象工作,调用构造函数进入函数体之后,进行是对已经构造类对象赋值,又调用个拷贝赋值操作符才能完成(如果并未提供...初始化列表成员初始化顺序: C++ 初始化类成员时,是按照声明顺序初始化,而不是按照出现在初始化列表顺序。 ?

1.9K20

C++构造函数意义 ( 构造函数显式调用与隐式调用 | 构造函数替代方案 - 初始化函数 | 初始化函数缺陷 | 默认构造函数 )

一、构造函数意义 1、类构造函数 C++ 提供 构造函数 和 析构函数 作为 类实例对象 初始化 和 销毁 方案 ; 定义一个类 若干 实例对象 , 每个对象都有独立 成员属性 ; 当 定义...由 C++ 编译器默认提供 ; 默认构造函数 分为 2 种类型 : 默认无参构造函数 : 如果 类 没有定义 构造函数 , C++ 编译器 会默认提供一个 无参构造函数 , 该构造函数函数体为空...; 默认拷贝构造函数 : 如果 类 没有定义 拷贝构造函数 , C++ 编译器 会默认定义一个 默认拷贝构造函数 , 该函数作用是进行简单成员变量赋值 ; 6、代码示例 - 初始化函数无法及时调用...下面的代码 Student 类 , 定义了初始化 函数 : // 初始化函数 初始化 实例对象 void init(int _age, int _height) { m_age =..._age; m_height = _height; } 使用 Student s 代码定义实例对象场景下 , 无法及时地调用 初始化函数 ; 代码示例 - 初始化函数 : #include "

54020

C++构造函数初始化列表 ④ ( 构造函数 和 析构函数 调用顺序分析 )

初始化 , 所有的构造函数都要进行初始化操作 ; 一、构造函数 和 析构函数 调用顺序 说明 1、构造函数调用顺序 一个类 C , 嵌套了 A 和 B 两个类类型 对象 作为 成员变量 ; 构造函数...和 B 构造函数 初始化列表 顺序 , 与先调用谁构造函数无关 ; 2、析构函数调用顺序 析构函数调用顺序 与 构造函数调用顺序相反 , 直接 将 构造函数 调用顺序 倒序排列即可 ; 3、...拷贝构造函数也可以定义初始化列表 如果一个类 没有定义 无参构造函数 , 只有一个 有参构造函数 , 此时 , C++ 编译器 不会为其 生成 默认无参构造函数 ; 这种场景下 涉及到了 构造函数...类型 : 强制初始化列表调用构造函数 : 如果类定义了 有参构造函数 , 导致 无参构造函数 被屏蔽 , 那么 所有的构造函数 初始化列表 , 都必须强制调用 子对象 构造函数 ;...不强制初始化列表调用构造函数 : 如果类定义了 无参构造函数 , 或者 有默认 无参构造函数 , 那么 初始化列表 不强制调用 子对象 构造函数 ; 使用如下方式 , 声明 A 和 B 类型成员变量

26120

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

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

52630

C++构造函数作用_c++什么是构造函数

所以看完这个博客不要就记住了构造函数赋值作用,他还有其他很多作用。 首先从本质上理解构造函数 C++ 程序,变量定义时可以初始化。如果不进行初始化,变量初始值会是什么呢?...未初始化局部变量 对于局部变量,如果不进行初始化,那么它初始值是随机。局部变量定义函数内部,其存储空间是动态分配在栈。...对象初始化 对象和基本类型变量一样,定义时也可以进行初始化。一个对象,其行为和内部结构可能比较复杂,如果不通过初始化为其某些成员变量赋予一个合理值,使用时就会产生错误。...C++,有一种特殊成员函数,它名字和类名相同,没有返回值,不需要用户显式调用(用户也不能调用),而是创建对象时自动执行。这种特殊成员函数就是构造函数(Constructor)。...C++语言中,“构造函数”就是一类特殊成员函数,其名字和类名字一样,并且不写返回值类型(void 也不写)。 构造函数可以被重载,即一个类可以有多个构造函数

1.4K20

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

一、构造函数初始化列表 传递参数 1、构造函数参数传递 构造函数 初始化列表 还可以使用 构造函数 参数 ; 借助 构造函数 参数列表 , 可以为 初始化列表 传递参数 ; 在下面的代码..., B 类 有参构造函数 , 传入了 3 个参数 , 这三个参数都不在函数体中使用 , 而是 参数列表中使用 , // 构造函数参数可以作为 B(int age, int ageOfA,..., 类 A 定义了 2 个参数 有参构造函数 ; 类 B 定义了 无参构造函数 , 但是该 无参构造函数 , 定义了函数列表 B() : m_age(10), m_a(10, 150) , 函数列表.../ 析构函数 执行顺序 ---- 1、构造函数 / 析构函数 执行顺序 类 B 定义了 A 类型 成员变量 ; A 类型对象 是 被组合对象 ; 构造函数执行顺序 : 初始化 B 类型 实例对象时...: 析构函数构造函数 执行顺序 相反 ; 2、代码示例 - 构造函数执行顺序 下面的代码 , B 类定义 A 类型 成员变量 ; 执行构造函数时 , 先调用 A 构造函数 , 再调用

20730

C++构造函数

类对象初始化 很多时候我们希望创建一个类对象同时能够给它数据成员赋初值,因为类数据成员是不能在声明时候赋初值,所以一种方法是可以通过定义成员函数来给数据成员赋初值,但有时候我们可能会忘记去调用这个函数...这就引出了构造函数构造函数 C++提供了构造函数来处理对象初始化构造函数是一种特殊成员函数,与其他成员函数不同,不需要用户来调用它,而是在建立对象时自动执行。...如果用户自己没有定义构造函数,则C++系统会自动生成一个构造函数,只是这个构造函数函数体是空,也没有参数,不执行初始化操作。...y=y_value; } 参数初始化列表式不带参数默认构造函数 我们类声明时候和不带参数默认构造函数是一样: class Point { double x,y; public: Point...参数初始化列表式带参数构造函数 我们类声明时候和带参数构造函数是一样: class Point { double x,y; public: Point(double x_value,double

14030

【Kotlin】类初始化 ② ( 主构造函数 | 主构造函数定义临时变量 | 主构造函数定义成员属性 | 次构造函数 | 构造函数默认参数 )

文章目录 一、主构造函数定义临时变量 二、主构造函数定义成员属性 三、次构造函数 四、构造函数默认参数 一、主构造函数定义临时变量 ---- Kotlin 类 , 可以 类声明 时 类名后...定义 " 主构造函数 " ; 构造函数 , 可以 定义 成员属性 , 并为 成员属性 提供 初始值 ; 构造函数 , 可以定义 临时变量 , 临时变量 一般使用 以下划线为开头 名称...---- 构造函数 定义临时变量 , 格式为 : class 类名(_临时变量名: 临时变量类型){} 构造函数也可以 定义成员属性 , 格式为 : class 类名(var 成员属性名:..., 每个次构造函数都可以有不同参数组合 ; 定义次构造函数后 , 必须调用主构造函数 , 并且为每个主构造函数 参数设置 参数值 ; 次构造函数可以实现代码逻辑 , 作为主构造函数补充 ; 代码示例...---- 定义 构造函数 时 , 可以为 构造函数 参数 指定 默认值 , 如果 用户传入了 值参 则 使用用户传入值 , 如果用户没有传入值 则 使用该 默认值 ; 如果 构造函数 参数有 指定默认值

4.8K20

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

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

85620

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

someClass(const int& num,const string& name) :this->num(num),this->studentNmae(name) {} }; 阅读以上错误代码,需要注意,使用初始化列表完成类数据成员初始化时...化列表不能使用this,那构造函数体内是否可以使用this呢?...答案是可以,因为构造函数对成员数据初始化初始化列表完成构造函数体内对数据成员所做工作仅仅是赋值操作,在此之前,类成员数据已经完成了初始化工作,是由其默认构造函数完成。...所以,这也是编程原则尽量使用初始化列表原因。...将上面错误代码类数据成员初始化改为构造函数体内赋值,则没有问题,代码修改如下: class someClass { int num; string studentNmae; public:

1.4K21

C++】多态 ⑨ ( vptr 指针初始化问题 | 构造函数 调用 虚函数 - 没有多态效果 )

会自动 被 C++ 编译器 存储到 " 虚函数表 " , 类中会自动添加一个 " vptr 指针 " 成员变量 指向 虚函数表 ; 2、vptr 指针初始化时机 对象 vptr 指针 指向 虚函数表..., 对象 被 创建时 , 由 C++ 编译器 对 对象 vptr 指针进行初始化操作 , 对象 创建完成 后 , 也就是 虚函数 整理完毕 , 全部放到 虚函数后 , vptr 指针 才会指向... 调用 虚函数 , 则 没有 多态效果 ; 父类 构造函数 , 调用了 父类函数 ; 此时 , 如果 创建 子类对象 , 执行 父类构造函数 , 仍然调用 父类 函数 , 子类函数...没有被调用 , 说明 构造函数 执行期间 , 多态没有生效 ; 参考 【C++】继承 ⑧ ( 继承 + 组合 模式类对象 构造函数 和 析构函数 调用规则 ) 博客 构造函数 调用规则 : 构造函数...调用完毕后 , vptr 指针 才指向 父类函数表 ; 然后 , 调用 子类 构造函数 , 此时 子类构造函数 调用 fun 虚函数 , 只能调用 子类本身 fun 函数 , 此时 vptr

22920

C++带参数构造函数 | 有参构造函数

C++带参数构造函数 C++,程序员希望对不同对象赋予不同初值,可以采用带参数构造函数调用不同对象构造函数时,从外面将不同数据传递给构造函数, 以实现不同初始化。...C++构造函数首部一般形式为  构造函数名(类型1 形参1,类型2 形参2,… ) 程序员是不能调用构造函数,因此无法采用常规调用函数方法给出实参,实参是定义对象时给出。...C++定义对象一般形式为  类名 对象名(实参1,实参2,…); C++数据成员是不能在声明类时初始化,如果一个类中所有的成员都是公用,则可以定义对象时对数据成员进行初始化。...class Time {   public:   day;   hour;   minute; }; Time time={25,19,54}; 上述对象和结构体变量初始化是差不多一个花括号内顺序列出各公用数据成员值...如果数据成员是私有的, 或者类中有private或protected成员,则不能用这种方法初始化。 案例:C++求体积,要求类中用带参数构造函数

3.8K64

C++移动构造函数

C++移动构造函数是一种特殊构造函数,用于将资源从一个对象转移到另一个对象而不进行深拷贝。移动构造函数通常用于支持移动语义,以提高代码效率和性能。...C++11之前,我们无法直接访问临时对象(右值),因此无法定义移动构造函数。但是通过引入右值引用,我们可以获取到临时对象,并将其资源移动到目标对象。...移动构造函数,通常会执行以下操作: 将源对象资源指针或资源句柄复制给目标对象,避免深拷贝。 将源对象资源指针或资源句柄置为nullptr,以确保源对象析构时不会释放资源。...移动构造函数,我们将源对象other资源指针赋值给目标对象data,并将源对象资源指针置为nullptr。这样可以确保资源所有权转移,并防止重复释放资源。...main()函数,我们创建了一个str1对象,然后使用std::move()函数将其转换为右值引用,并将其赋值给str2对象。

47420

C++拷贝构造函数

前言 类6个默认成员函数:如果一个类什么成员都没有,简称为空类。 空类真的什么都没有吗?并不是,任何类什么都不写时,编译器会自动生成以下6个默认成员函数。...默认成员函数:用户没有显式实现,编译器会生成成员函数称为默认成员函数。 class Date {}; 一、拷贝构造函数概念 理解 现实生活,可能存在一个与你一样自己,我们称其为双胞胎。...C++拷贝构造函数是一种特殊构造函数,用于创建对象时,使用一个已有对象内容来初始化对象。它接受一个同类对象作为参数,并按照该对象数据成员值来创建新对象。...拷贝构造函数通常用于以下情况: 创建对象时,使用同类已有对象值来初始化新对象。 以值传递方式将对象传递给函数。 以值返回方式从函数返回对象。...如果类包含指针类型数据成员,需要自己定义拷贝构造函数,进行深拷贝,确保指针指向对象也被复制。 注意,拷贝构造函数是类成员函数,通常定义公有部分。

4100
领券