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

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

构造函数初始化列表 总结 : 初始化列表 可以 为 类的 成员变量 提供初始值 ; 初始化列表 可以 调用 类的 成员变量 类型的 构造函数 进行成员变量初始化操作 ; 初始化列表 可以 使用 构造函数...中传入的 参数 ; 类初始化时 , 根据定义顺序 , 先调用 成员变量的 构造函数 , 然后调用外部类构造函数 , 析构函数正好相反 ; 实例对象 的 const 成员变量 必须只能在 初始化列表 中进行...初始化 , 所有的构造函数都要进行初始化操作 ; 一、构造函数 的 初始化列表 中 为 const 成员变量初始化 1、初始化 const 常量成员 如果 类 中定义了 被 const 修饰 的 成员变量..., 那么该成员变量 必须被初始化 , 否则会报错 ; 对象中的 const 成员 必须在 声明后 立刻进行初始化 ; const 成员的初始化 只能通过 构造函数 的 初始化列表 进行初始化 ; 注意...; // 常量成员 }; int main() { // 通过 B 的有参构造函数 // 其中 构造函数中的参数 作为 参数列表 中的参数值 B b(10, 10, 150); // 控制台暂停

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

    【C++】STL 容器 - vector 动态数组容器 ③ ( vector 容器初始化 - 初始化列表 | vector 容器赋值 - assign 函数 swap 函数 )

    C++ 标准模板库 ( Standard Template Library , STL ) 中的一个动态数组 容器 , 该容器有如下初始化方式 : 默认初始化 : 创建一个空的 vector 容器 ;...2, 3}; 使用数组初始化 : 向 vector 容器 构造函数中 传递一个数组 和 数组个数 , 来初始化 vector 容器 // 先声明一个数组 int array[] = {1, 2, 3,...4, 5}; // 将整个数组的值 初始化给 vector 容器 vector vec(array, array + sizeof(array) / sizeof(int)); 使用迭代器范围初始化...: 通过传递两个迭代器来指定要复制的元素范围 ; // 初始化一个 vector 容器 vector vec1 {1, 2, 3}; // 使用 范围构造函数 从 vec1 容器中 复制元素到...创建一个 vector 动态数组容器 // 该容器中 有 3 个元素 , 每个元素值为 int 类型值 1 vector vec1(3, 1); // 3.

    5K10

    【Kotlin】类的初始化 ① ( 成员属性 | Kotlin 自动为成员字段生成 getter 和 setter 方法 | 手动设置成员的 getter 和 setter 方法 | 计算属性 )

    文章目录 一、Kotlin 自动为成员字段生成 getter 和 setter 方法 二、手动设置成员的 getter 和 setter 方法 三、计算属性 一、Kotlin 自动为成员字段生成 getter...Java 代码中 , 存在 name 和 age 成员的 getter 和 setter 函数 ; 调用 hello.name 方法 , 实际上调用的是 hello.setName 方法 ; class...结果 如下 : 二、手动设置成员的 getter 和 setter 方法 ---- Kotlin 会为 类中的每个 成员属性 生成一个 field , getter , setter ; field...用于存储 属性数据 , 是由 Kotlin 自动进行定义封装的 , 只有在 getter 和 setter 函数中才能调用 field ; 手动定义 getter 和 setter 方法示例 : class...某个属性 是 通过计算得到的 , 可以 在该属性的 getter 和 setter 方法中进行计算设置或获取结果 , 不使用 field 属性 ; 下面的 age 属性就是通过计算得到的属性值 , 每次获取都是

    3K20

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

    一、类对象作为成员变量时的构造函数问题 1、问题描述 如果 一个类 A 的对象 作为 另外一个类 B 的成员变量时 , 在以下场景会报错 : 为类 A 定义 有参的 构造函数 , 那么 A 的无参默认构造函数就失效了...public: int m_age; // 年龄 A m_a; // A 类型成员变量 }; int main() { // 通过 B 的默认无参构造函数初始化 B 对象 B b;...是一种用于初始化类的成员变量的方法 ; 构造函数初始化列表 可实现功能 : 为成员变量提供初始值 调用其他 成员变量的 构造函数 来初始化成员变量 构造函数初始化列表语法规则 : 构造函数() : 成员变量名称...初始化列表中的元素由 成员变量的名称 和 初始值组成 , 使用等号 = 连接 ; 在下面的代码中 , 为 B 类定义了默认的构造函数 , 其中定义了 构造函数 初始化列表 ; 在 初始化列表中 , m_age...}; int main() { // 通过 B 的默认无参构造函数初始化 B 对象 B b; // 控制台暂停 , 按任意键继续向后执行 system("pause"); return

    1.5K30

    动态规划-子数组和为总和的一半

    动态规划,01背包问题 题目是这样的: 给定一个正整数数组,问能否将其分为两个子数组,使得这两个子数组的和相等,也即是否存在一个子数组的和为为总和的一半 例如:数组{1,2,3,3,4,5},...总和为18,子数组{1,2,3,3}和为9,剩下的{4,5}和也为9,所以可以成功划分 思想和上一篇【你的的背包,让我走的好缓慢】思想差不多,假设和为w,对于dp[w]表示能否划分为和为w的数组,对于每个元素...,可以选择加入子数组或者不加入子数组,所以dp方程可以写为dp[j]=dp[j] || dp[j-nums[i]] 整个代码可以这样写: #include #include <vector...322.零钱兑换】也有异曲同工之妙, 给你一个整数数组 coins ,表示不同面额的硬币;以及一个整数 amount ,表示总金额。...计算并返回可以凑成总金额所需的 最少的硬币个数 。如果没有任何一种硬币组合能组成总金额,返回 -1 。你可以认为每种硬币的数量是无限的。

    85540

    【数据结构】二次封装自己的数组(三)升级为动态数组

    我们之前在我们的数组内部封装了静态的数组,如果当我们的数组增加,超过了我们数组所设置的容量时,程序会出现错误。...创建一个新数组,容量为原来容量的两倍,将原数据拷贝进新数组,并改变data的引用。...222); Console.WriteLine(arr.ToString()); Console.ReadKey(); } 我们在初始时设置数组的容量为...我们再次添加111,发现数组扩容了两倍,capacity=16,再次添加222,数组数据增加1,容量不变。符合我们设计的预期。...如果容量比较大,我们存的数据使用的空间少,将会造成资源的浪费,我们这时设置,当数组中数据的量小于容量的1/2时,将数组容量缩减一半 修改删除方法 //删除指定索引位置的元素 public

    16910

    【C++】STL 容器 - vector 动态数组容器 ② ( vector 有参构造函数 | 范围构造函数 | 初始化 n 个 指定元素 | 拷贝构造函数 )

    vector 容器有参构造函数 一、vector 有参构造函数 1、使用另外的 vector 对象初始化 - 范围构造函数 vector 动态数组容器 , 初始化时 , 可以使用另外的 vector...& a 参数 : 为 元素 分配内存的 内存分配器 , 默认 使用标准分配器 std::allocator ; 该构造函数 与 使用两个迭代器范围进行初始化的构造函数略有不同 ; 使用两个迭代器范围进行初始化时..., 创建一个 vector 动态数组容器 , 该容器中 有 5 个元素 , 每个元素值为 int 类型值 6 ; // 创建一个 vector 动态数组容器 // 该容器中 有 5 个元素 , 每个元素值为...int 类型值 6 std::vector vec(5, 6); // 创建一个 vector 动态数组容器 // 该容器中 有 3 个元素 , 每个元素值为 字符 `A` std::...int main() { // 创建一个 vector 动态数组容器 // 该容器中 有 3 个元素 , 每个元素值为 int 类型值 1 vector vec1(3, 1);

    81710

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

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

    91930

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

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

    6.6K20

    C语言结构体:从入门到精通,一篇文章彻底搞懂

    结构体变量的初始化 全部成员初始化 我们可以使用花括号包裹的初始化列表来初始化结构体变量: struct Point p = {, }; 这里的初始化顺序必须与结构体成员声明的顺序一致。...struct Point points[10]; // 定义一个包含10个Point元素的数组 points[].x = ;       // 访问第一个元素的x成员 结构体数组的初始化 我们也可以初始化结构体数组... FlexArray) + 10 * sizeof(int)); fa->len = ; 柔性数组的特点: 柔性数组必须是结构体的最后一个成员 结构体大小在编译时是未确定的 必须动态分配内存,指定数组的大小...struct Point p; // 静态分配,通常在栈上 动态分配的结构体 动态分配的结构体使用malloc、calloc等函数在堆上分配内存,需要手动管理内存。...通过本报告的详细讲解,我们系统地学习了结构体的基本概念、声明与定义、初始化、成员访问、内存管理、嵌套、指针、数组、函数交互以及高级应用等方面的知识。

    53710

    数据输出

    例如,在题目中,我们使用strcpy函数为结构体的name成员赋值: strcpy(student.name, "Bob"); 这条语句会将字符串"Bob"复制到student.name中,并在末尾添加空字符...结构体的初始化 在定义结构体变量时,必须正确初始化其成员。如果未正确初始化,可能会导致程序出现未定义行为。...在题目中,我们通过直接初始化的方式为结构体数组students的成员赋值: struct stu students[3] = { {9801, "zhang", 20}, {9802,...通过这种方式,我们可以更高效地使用内存。 4. 动态内存分配与数据输出 在C语言中,动态内存分配允许我们根据需要分配和释放内存。通过malloc和free函数,我们可以动态地创建和销毁结构体变量。...通过printf函数,我们可以灵活地输出各种类型的数据。通过结构体、指针、数组和函数的结合使用,我们可以实现复杂的数据输出逻辑。

    20510

    【C语言】结构体与共用体深入解析

    结构体变量的声明方式如下:struct StructName varName;结构体的初始化可以通过两种方式进行:静态初始化和动态初始化。1.2.1 静态初始化静态初始化是在定义结构体变量时直接赋值。...struct Person { char name[50]; int age;};struct Person person1 = {"John", 25};1.2.2 动态初始化动态初始化是通过用户输入或运行时计算来初始化结构体的成员...可以通过值传递或者引用传递(指针传递)传递结构体。1.5.1 结构体值传递在函数中对结构体进行值传递时,函数接收到结构体的副本,对副本的修改不会影响原结构体。...结构体与共用体与指针的结合3.1 结构体指针结构体指针是指向结构体类型变量的指针。通过结构体指针,可以访问结构体的成员。结构体指针通常与malloc动态内存分配结合使用。...malloc(sizeof(struct Person)); // 动态分配内存strcpy(ptr->name, "John");ptr->age = 25;3.1.2 访问结构体成员通过结构体指针访问成员时

    27010

    【C语言】解决C语言报错:Use of Uninitialized Variable

    这种操作会导致变量包含未定义的随机值,导致程序运行结果不可预测。 Use of Uninitialized Variable的常见原因 局部变量未初始化:在函数内声明的局部变量未被初始化直接使用。...", p.x); // 使用未初始化结构体成员 return 0; } 动态分配的内存未初始化:使用malloc分配内存后未对其进行初始化。...int main() { int arr[10] = {0}; // 初始化数组所有元素为0 printf("%d\n", arr[0]); return 0; } 初始化结构体成员...正确的做法是初始化数组: #include int main() { int arr[10] = {0}; // 初始化数组所有元素为0 printf("%d\n"...正确的做法是初始化结构体成员: #include struct Point { int x; int y; }; int main() { struct

    62410

    探索动态内存开辟的奥秘

    在C/C++程序中,内存区域通常被划分为以下几个部分: 1.栈: 栈区主要存放运⾏函数⽽分配的局部变量、函数参数、返回数据、返回地址等 2.堆: 用于动态分配的内存,程序员可以通过malloc、...void* calloc (size_t num, size_t size); 函数的功能是为 num 个⼤⼩为 size 的元素开辟⼀块空间,并且把空间的每个字节初始化为0。...使用: 如果参数 ptr 指向的空间不是动态开辟的,那free函数的⾏为是未定义的。 如果参数 ptr 是NULL指针,则函数什么事都不做。 返回值: 不反回任何值。...4.2 柔性数组的特点 结构中的柔性数组成员前⾯必须⾄少⼀个其他成员。 sizeof 返回的这种结构⼤⼩不包括柔性数组的内存。...包含柔性数组成员的结构⽤malloc ()函数进⾏内存的动态分配,并且分配的内存应该⼤于结构的⼤⼩,以适应柔性数组的预期⼤⼩。

    17410

    C 语言 | 结构体详解:自定义数据类型的艺术

    为复杂数据结构(如链表、树)提供基础 便于组织和处理大量相关数据 声明格式: struct 结构体名 { 数据类型 成员名1; 数据类型 成员名2; // ...更多成员 };...struct Student *pStu; // 声明结构体指针 pStu = &stu1; // 指向结构体变量 // 通过指针访问成员:使用箭头运算符(->) printf(...定义与初始化 // 定义结构体数组 struct Student class[3] = { {"张三", 18, 95.5f}, {"李四", 19, 92.0f}, {"王五...结构体总大小是其最大成员类型大小的整数倍 嵌套结构体的对齐以其最大成员类型大小为基准 示例分析: struct Example { char a; // 1字节 int b;...初始化所有成员:结构体变量声明后应初始化所有成员,避免使用未初始化的值 字符串处理:结构体中的字符串成员需要注意缓冲区溢出问题 动态内存管理:包含指针成员的结构体需要特别注意深拷贝和内存释放 // 包含指针成员的结构体

    20710

    内存之谜:C语言动态内存管理

    free 是 C 语言中的一个标准库函数,用于 释放 之前通过 malloc、calloc 或 realloc 等函数动态分配的内存。...在释放指针指向的内存后立即将指针置为 NULL; calloc函数 calloc函数用来动态地分配内存,并初始化所有字节为零。这与 malloc 函数不同,malloc分配的内存含有未定义的值。...用于创建含有可变大小数组的结构体。柔性数组通常用于处理动态大小的数据。 声明方式:在结构体中,柔性数组是通过在最后一个成员声明一个数组而不指定其大小来定义的。...struct my_struct { int length; char data[]; // 柔性数组成员 }; 内存分配:为使用柔性数组的结构体分配内存时,需要根据实际需要的数组大小动态计算所需内存...sizeof返回的结构大小不包括柔性数组的内存 包含柔性数组成员的结构用malloc ()函数进行内存的动态分配,并且分配的内存应该大于结构的大小,以适应柔性数组的预期大小。

    27210

    柔性数组详解

    C99 中,柔性数组是一种动态可变的数组,结构中的最后一个元素允许是未知大小的数组,这就叫做『柔性数组』成员。​...• sizeof 返回的这种结构大小不包括柔性数组的内存。​ • 包含柔性数组成员的结构用malloc ()函数进行内存的动态分配,并且分配的内存应该大于结构的大小,以适应柔性数组的预期大小。...() { printf("%d\n", sizeof(struct St));//4 return 0; } 三、柔性数组的使用 包含柔性数组成员的结构体要用malloc函数来进行内存的动态分配...如下所示: •int arr[];//定义一个柔性数组 • struct St s = {0}; // 定义并初始化一个St结构体变量s,其中所有成员都被初始化为0。...• struct St* ptr = (struct St*)realloc(ps, sizeof(struct St) + 15 * sizeof(int)); //使用 realloc 函数将数组的大小从

    22910
    领券