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

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

构造函数初始化列表 总结 : 初始化列表 可以 为 类的 成员变量 提供初始值 ; 初始化列表 可以 调用 类的 成员变量 类型的 构造函数 进行成员变量初始化操作 ; 初始化列表 可以 使用 构造函数...初始化 , 所有的构造函数都要进行初始化操作 ; 一、构造函数 的 初始化列表 中 为 const 成员变量初始化 1、初始化 const 常量成员 如果 类 中定义了 被 const 修饰 的 成员变量...: 这里区分 初始化 与 赋值 , 初始化 是 变量 声明时 同时 为其 设置一个 初始化值 ; 赋值 是 变量 声明以后 , 再对变量进行赋值 ; const 成员变量 是常量 , 是 无法在声明后...; // 年龄 A m_a; // A 类型成员变量 const int m_const_int; // 常量成员 }; 执行结果 : 已启动生成… 1>------ 已启动生成: 项目: HelloWorld...20756)已退出,代码为 0。

24230

C++使用new来初始化指向类的指针

C++使用new来初始化类的指针 1.ClassName * p = new ClassName; 调用默认构造函数。...C++指针初始化问题 c++中的指针是一个很经典的用法,但是也是最容易出错的,比如定义了一个指针,必须对其进行初始化,不然这个指针指向的是一个未知的内存地址,后续对其操作的时候,会报错。...下面就总结一下c++指针初始化的一些方法,以及我自己遇到的一些问题以及心得体会。...c++指针初始化的一般方法 1.将一个已经在内存中存在变量的地址传递给定义的指针 这个指针就指向这个变量的内存地址(相同的数据类型),完成初始化。...3.把指针设置为NULL或者0 这样做一般只是为了没有具体初始化的时候做的,这样避免了野指针,后面可以使用if(指针==NULL)来判断,然后再进行操作。

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

    C++中关于指针初始化和使用NULL的理解

    1、严禁使用未被初始化的指针:C++创建指针的时候,只分配存储地址的内存,并不会分配存储数据的内存,所以指针可能指向任何位置。   ...(1)使用解除运算符(*)之前,一定要对指针初始化,否则若声明的指针刚好指向程序代码的位置会导致一些很隐蔽的错误。    (2)未被初始化之前禁止指针之间的赋值。...2、对NULL的理解 一开始想不明白:如果给一个指针初始化成NULL之后不是就代表,指针指向一块内存单元了吗,那应该可以直接往里面填值,可是实际却不可以。...首先看一下百科中一段关于NULL的描述: NULL的出现是一种约定俗成,事实上它不是C语言中的关键字;把一个指针赋值为NULL,通常的说法是“将指针悬空”。这样,指针就无法再进行任何数据访问了。...所以一个良好的习惯是,当一个指针的工作稍事休息,先把它赋值为NULL,待到再度使用时,重新对其赋值以及进行指针类型转化。 前面说到“NULL指针无法再进行任何数据访问”,其实是视编译器功能而定的。

    2.8K100

    【C++】继承 ⑥ ( 类型兼容性原则 | 父类指针 指向 子类对象 | 使用 子类对象 为 父类对象 进行初始化 )

    一、public 公有继承 - 示例分析 1、类型兼容性原则 类型兼容性原则 : C++ 的 " 类型兼容性原则 “ 又称为 ” 赋值兼容性原则 " ; 子类代替父类 : 需要 基类 ( 父类 ) 对象的..." 应用场景 : 直接使用 : 使用 子类对象 作为 父类对象 使用 ; 赋值 : 将 子类对象 赋值给 父类对象 ; 初始化 : 使用 子类对象 为 父类对象 初始化 ; 指针 : 父类指针 指向...子类对象 , 父类指针 值为 子类对象 在 堆内存 的地址 , 也就是 将 子类对象 地址 赋值给 父类类型指针 ; 引用 : 父类引用 引用 子类对象 , 将 子类对象 赋值给 父类类型的引用 ; 二...); } 2、使用 子类对象 为 父类对象 进行初始化 定义父类对象 , 可以直接使用 子类对象 进行初始化操作 ; // II....类型兼容性原则 : 使用 子类对象 为 父类对象 进行初始化 Parent parent = child; 3、完整代码示例 #include "iostream" using namespace

    44300

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

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

    26230

    【C++】运算符重载案例 - 字符串类 ③ ( 重载 左移 << 运算符 | 自定义类使用技巧 | 直接访问类的私有指针成员 | 为指针分配指定大小内存并初始化 0 )

    m_p 指针指向的数据输出到 out 输出流中 out << s.m_p << endl; // 该返回值还需要当左值使用 return out; } 同时 , 还要在 String 类中 ,..., 指向堆内存中的字符串 char* m_p; }; 2、为指针分配指定大小内存并初始化 0 在 有参构造函数 中 , 接收 int 类型的参数 , 该参数表示字符串大小 ; 如果 参数 为 0 ,...则创建一个空字符串 , 指针指向的内存空间大小为 1 , 只存放一个 ‘\0’ 字符 , 表示字符串的结尾 ; 如果 参数 大于 0 , 为 字符串指针 分配 该大小 + 1 的内存空间 , 然后将这块内存空间赋值...String& String::operator=(const char* p) { // 先处理本对象已分配的内存 if (this->m_p !...m_p 指针指向的数据输出到 out 输出流中 out << s.m_p << endl; // 该返回值还需要当左值使用 return out; } 3、Test.cpp 测试类 #include

    25510

    【C++】继承 ⑥ ( 继承中的构造函数和析构函数 | 类型兼容性原则 | 父类指针 指向 子类对象 | 使用 子类对象 为 父类对象 进行初始化 )

    一、public 公有继承 - 示例分析 1、类型兼容性原则 类型兼容性原则 : C++ 的 " 类型兼容性原则 “ 又称为 ” 赋值兼容性原则 " ; 子类代替父类 : 需要 基类 ( 父类 ) 对象的..." 应用场景 : 直接使用 : 使用 子类对象 作为 父类对象 使用 ; 赋值 : 将 子类对象 赋值给 父类对象 ; 初始化 : 使用 子类对象 为 父类对象 初始化 ; 指针 : 父类指针 指向...子类对象 , 父类指针 值为 子类对象 在 堆内存 的地址 , 也就是 将 子类对象 地址 赋值给 父类类型指针 ; 引用 : 父类引用 引用 子类对象 , 将 子类对象 赋值给 父类类型的引用 ; 二...); } 2、使用 子类对象 为 父类对象 进行初始化 定义父类对象 , 可以直接使用 子类对象 进行初始化操作 ; // II....类型兼容性原则 : 使用 子类对象 为 父类对象 进行初始化 Parent parent = child; 3、完整代码示例 #include "iostream" using namespace

    30920

    Day9-字符串-字符模式匹配

    冷静分析: 1.当切分出一个单词时,若该单词已出现过,那么这个单词对应的pattern字符,必须也是之前出现时对应的pattern字符 2.当切分出一个单词时,若该单词没有出现过,则与之对应的...这里引入新的概念,哈希map 如果用一句话解释,它就是个key-value的数据结构,保存的是key到value的映射 在c++标准STL中也支持了这种数据结构,只需#include<map...it's value is:%d\n", string1.c_str(), hash_map[string1]); } map ::iterator it;//初始化一个迭代器指针...,与end函数返回的迭代器指针相同,即,当该单词从未出现在哈希map中 if (used[pattern[position]]){//若当前pattern字符已使用,返回错误...函数返回的迭代器指针不等于end函数返回的迭代器指针,即哈希map中已找到了该单词,即当前单词已与单个字符建立映射 if (word_map[word] !

    61630

    野指针

    2.出现野指针的常见情形 2.1使用未初始化的指针 出现野指针最典型的情形就是在定义指针变量之后没有对它进行初始化,如下面的程序。...指针指向某个对象之后,当这个对象的生命周期已经结束,对象已经消亡后,仍使用指针访问该对象,将出现运行时错误。...注意: (1)如果将cout输出num的值为10,或者将cout输出,原因是局部变量num的内存空间虽然在函数retAddr...3.如何避免野指针的出现 野指针有时比较隐蔽,编译器不能发现,为了防止野指针带来的危害,开发人员应该注意以下几点。 (1)C++引入了引用机制,如果使用引用可以达到编程目的,就可以不必使用指针。...因为引用在定义的时候,必须初始化,所以可以避免野指针的出现。 (2)如果一定要使用指针,那么需要在定义指针变量的同时对它进行初始化操作。定义时将其置位NULL或者指向一个有名变量。

    48610

    什么是野指针

    2.野指针的常见情形 2.1 未初始化的指针 出现野指针最典型的情形就是在定义指针变量之后没有对它进行初始化,如下面的程序。...指针指向某个对象之后,当这个对象的生命周期已经结束,对象已经消亡后,仍使用指针访问该对象,将出现运行时错误。...注意: (1)如果将cout输出 num 的值为10,或者将cout输出,原因是局部变量num的内存空间虽然在函数retAddr...3.避免野指针 野指针有时比较隐蔽,编译器不能发现,为了防止野指针带来的危害,开发人员应该注意以下几点。 (1)C++ 引入了引用机制,如果使用引用可以达到编程目的,就可以不必使用指针。...因为引用在定义的时候,必须初始化,所以可以避免野指针的出现。 (2)如果一定要使用指针,那么需要在定义指针变量的同时对它进行初始化操作。定义时将其置位 NULL 或者指向一个有名变量。

    74720

    一文掌握C++基本语法

    C++输入&输出 1. 使用cout标准输出(控制台)和cin标准输入(键盘)时,必须包含头文件以及std标准命名空间。 2....再来看一下C语言能否调用C++的库,我们把后缀名更改一下 (这里是c语言了,因此只能用typedef过的别名,不能再用一个Stack,因为C语言不支持) 好像不行,我们刚刚是在C++的部分进行修改...引用在定义时必须初始化,指针没有要求 2. 引用在初始化时引用一个实体后,就不能再引用其他实体,而指针可以在任何时候指向任何一个同类型实体 3. 没有NULL引用,但有NULL指针 4....在sizeof中含义不同:引用结果为引用类型的大小,但指针始终是地址空间所占字节个数(32位平台下占4个字节) 5. 引用自加即引用的实体增加1,指针自加即指针向后偏移一个类型的大小 6....指针空值nullptr(C++11) 10.1 C++98中的指针空值 在传统头文件中有如上定义,我们发现在C++中Null被宏替换为0,而如果我们要对一个指针赋空值,仍采用NULL的话有些不妥,因为

    1.8K10

    C++语言基础篇(二)

    再次渡入繁世,人潮汹涌,眼里茫然,信仰永恒,皆为华夏 目录 1、C++ 中内存分配情况 2、C++ 中的指针参数传递和引⽤参数传递 3、C++ 中 const 和 static 关键字(定义,⽤途) 作...2、C++ 中的指针参数传递和引⽤参数传递 指针参数传递本质上是值传递,它所传递的是⼀个地址值。...指针变量在符号表上对应的地址值为指针变量的地址值,⽽引⽤在符号表上对应的地址值为引⽤对象的地址值 (与实参名字不同,地址相同)。...(补充:静态⾮常量数据成员,其只能在类外定义和初始化,在类内仅是声明⽽已。)...作⽤五: 类成员/类函数声明 static 函数体内 static 变量的作⽤范围为该函数体,不同于 auto 变量,该变量的内存只被分配⼀次,因此其值在下 次调⽤时仍维持上次的值; 在模块内的 static

    59510

    C++面试知识总结

    BSS段:存放未初始化的static变量和全局变量 Data段:存放初始化过的static变量和全局变量 Text段:存储程序的二进制代码,程序代码区。  ...C++程序的内存布局与C程序布局类似,区别是C++不再区分全局变量和静态变量是否已经初始化,全部存储在静态存储区;另外堆中存放new/delete申请释放的资源,而malloc和free申请的资源存放在自由存储区...2.14 野指针,未初始化指针和空指针的区别 野指针:指向一个已删除的对象或无意义地址的指针。 原因:指针变量没有被初始化,或者指针p被free或者delete之后,没有置为NULL。  ...3.13 static总结 函数体内static变量的作用范围为该函数体,不同于auto变量,该变量的内存只被分配一次,因此其值在下次调用时仍维持上次的值。...在定义该const变量时,通常需要对它进行初始化,因为以后就没有机会再去改变它了。 对指针来说,可以指定指针本身为const,也可以指定指针所指的数据为const,或二者同时指定为const。

    1.8K41

    C++区别于其他语言的知识点总结

    C++是博主的一门限选课,所使用的课本为谭浩强老师的《C++面向对象程序设计》(第二版),这本书内容全面,简单易懂,也强烈推荐给大家(尤其是初学者)。...C/C++的指针,二者区别相当大。...int a; int &b = a; //声明b是一个整型变量的引用,它初始化为a int *p; //定义指针p p = &a; //定义引用必须直接赋值 定义指针可以稍后赋值 //C++中所有的实参到形参的传递都是值传递...,当前目录没有则会去其他目录寻找 extern引用已近声明过的变量(不同文件中) C++所有类必须以分号”;”结束 7.class 和 struct的区别 class和struct具有相同的功能...因此与C语言不同,即使main()函数为空,只要编译的文件里有构造函数且构造函数有输出,即使main()函数为空程序也有输出。

    921100

    C++与C的区别终于说清楚了!

    C11仍处于起步阶段,许多编译器开发商甚至都没有完全支持C99。 我们要了解C90、C99、C11之间的区别,还要了解C++11与这些标准之间的区别,以及每个标准与C标准之间的区别。...在我们的系统中,尝试用%s转换说明打印'ABCD'会导致程序崩溃,因为'ABCD'的数值(1094861636) 已超出该类型可表示的范围。...— 06 — 指向void的指针 C++可以把任意类型的指针赋给指向void的指针,这点与C相同。但是不同的是,只有使用显式强制类型转换才能把指向void的指针赋给其他类型的指针。...即使用typedef把int32_t定义为int也不能这样做。但是在C中可以这样做。另外,在第15章中介绍过,C允许混合使用内联定义和外部定义,而C++不允许。...下面列出了一些只有C99/C11中才有的特性: 指定初始化器; 受限指针(Restricted pointer) (即,restric指针); 变长数组; 伸缩型数组成员; 带可变数量参数的宏。

    90010

    【C++篇】启航——初识C++(下篇)

    引⽤不是新定义⼀个变量,⽽是给已存在变量取了⼀个别名,编译器不会为引⽤变量开辟内存空间,它和它引⽤的变量共⽤同⼀块内存空间。...3.必须初始化:引用在创建时必须初始化,并且一旦初始化后不可改变绑定的对象。 4.不能为 NULL:引用不能被赋值为 nullptr,必须引用一个有效的对象。...指针:指针是一个变量,它存储一个地址,指向另一个变量的内存位置。指针在定义时不一定要初始化,可以在之后赋值。 (2).初始化 引用:在定义引用时,必须立即初始化并引用一个有效的对象。...int a = 10; int &b = a; std::cout 输出 sizeof(int) 指针:在 sizeof 运算中,指针的大小是固定的(在 32 位平台上通常为...NULL 0 #else #define NULL ((void *)0) #endif #endif • C++中 NULL 可能被定义为字⾯常量0,或者C中被定义为⽆

    5810

    Golang深入浅出之-Go语言指针面试必知:理解与使用指针

    一、指针基础指针声明与初始化在Go语言中,声明一个指针类型变量需使用星号(*)标识:var p *int // 声明一个指向整型变量的指针p初始化指针时,为其赋予一个变量的内存地址:i := 42p =...&i // 将变量i的地址赋给指针p通过指针访问值使用星号解引用指针以访问其指向的值:gofmt.Println(*p) // 输出:42指针作为函数参数通过指针传递参数,实现在函数内部修改原始变量的值...()用于创建切片、映射或通道等复合类型,返回的是已初始化的值而非指针:s := make([]int, 5) // 创建长度为5的整型切片,初始元素均为0内存逃逸分析Go语言的垃圾回收机制会自动管理内存...牢记new()用于基本类型和自定义类型,返回指针;make()用于切片、映射和通道,返回初始化后的值。...{Bob 41}}易错点:在不需要修改结构体时仍使用指针接收者,可能导致不必要的内存分配。

    88510

    C++奇迹之旅:C++内存管理的机制初篇

    C/C++内存分布 这是C/C++中程序内存区域划分图: 数据段:也叫静态数据段或初始化数据段,用于存储程序中的全局变量和静态变量,这些变量在程序启动时就已经分配好内存空间并初始化。...sizeof(pChar3) = 8; strlen(pChar3) = 4; pChar3 是一个指向字符串常量 "abcd" 的指针,在 32 位系统上,指针大小为 4 字节。...在 64 位系统上,指针大小为 8 字节。 strlen(pChar3) 返回字符串的长度,不包括结尾的 '\0',所以为 4。...sizeof(ptr1) = 8; ptr1 是一个指向动态分配的 int 类型数组的指针,在 32 位系统上,指针大小为 4 字节。在 64 位系统上,指针大小为 8 字节。...(void* ptr, size_t size); 功能:调整已分配内存块的大小,并返回指向新内存块的指针。

    14010

    17个C++编程常见错误及其解决方案

    空指针解引用 错误示例: int* ptr = nullptr; std::cout 指针,可能导致段错误 解决方法: 在访问指针之前,务必检查其是否为空。...悬挂指针 错误示例: 指向动态分配内存的指针在释放内存后仍被继续使用。...int* p = new int(5); delete p; *p = 10; // 悬挂指针,可能导致段错误 解决方法: 释放内存后将指针置为nullptr,表明它不再指向有效的内存。 6....全局对象的时序和作用域问题 错误示例: 在C/C++程序中,全局对象的初始化顺序由编译器界定,非显式指定,可能会导致依赖全局对象的组件遭遇初始化时序问题,影响对象状态一致性及程序稳定性。...但依据C++标准,全局对象的初始化顺序未严格规定,尤其在不同编译器或复杂项目中,可能导致Service使用未完全初始化的Database对象,引发未预期行为。

    14110
    领券