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

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

构造函数初始化列表 总结 : 初始化列表 可以 成员变量 提供初始值 ; 初始化列表 可以 调用 成员变量 类型 构造函数 进行成员变量初始化操作 ; 初始化列表 可以 使用 构造函数...传入 参数 ; 初始化时 , 根据定义顺序 , 先调用 成员变量 构造函数 , 然后调用外部类构造函数 , 析构函数正好相反 ; 实例对象 const 成员变量 必须只能在 初始化列表 中进行...初始化 , 所有的构造函数都要进行初始化操作 ; 一、构造函数 初始化列表 const 成员变量初始化 1、初始化 const 常量成员 如果 定义了 被 const 修饰 成员变量...: 这里区分 初始化 与 赋值 , 初始化 是 变量 声明时 同时 设置一个 初始化值 ; 赋值 是 变量 声明以后 , 再对变量进行赋值 ; const 成员变量 是常量 , 是 无法在声明后...进行赋值 , 因此 这里 必须在 构造函数 初始化列表 对 const 成员变量 进行赋值 ; 2、错误代码示例 - 没有初始化常量成员 在下面的 B , 定义了常量 const int

17930

C++C++ this 指针用法 ③ ( 全局函数 与 成员函数 相互转化 | 有参构造函数设置默认参数值 | 返回匿名对象与返回引用 )

一、全局函数 与 成员函数 相互转化 1、成员函数转为全局函数 - 多了一个参数 C++ 编译器 , 在编译阶段会将 C++ 成员函数 转为 全局函数 , 转换时 , 会 增加一个参数到参数列表开始为止..., 这个增加参数是 对象本身指针 ; 在 Student , 定义了如下函数 : // 成员函数 转为 全局函数 , 多了一个参数 Student* pThis 作为第一个参数 void... print 成员函数 , 转为 全局函数 , 转换后代码 : // 将成员函数 void print() // 转为 全局函数 void Student_print(Student* pThis...; } 详细代码 , 参考最后完整代码示例 ; 二、有参构造函数设置默认参数值 ---- Student 定义了有参构造函数 , 则其默认无参构造函数 , 就不会生成 ; // 带参构造函数...; 如下带参数构造函数 , 并且为其 有参构造函数 参数 设置一个默认值 , 此时就可以使用 名 对象名 方式定义对象变量 ; class Student { public: // 带参构造函数

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

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

一、public 公有继承 - 示例分析 1、类型兼容性原则 类型兼容性原则 : C++ " 类型兼容性原则 “ 又称为 ” 赋值兼容性原则 " ; 子类代替父 : 需要 基 ( 父 ) 对象...地方 , 都可以使用 " 公有继承 " 派生 ( 子类 ) 对象 替代 , 该 派生 ( 子类 ) 得到了 除 构造函数 和 析构函数 之外 所有 成员变量 和 成员方法 ; 功能完整性 :...子类对象 , 父指针 值 子类对象 在 堆内存 地址 , 也就是 将 子类对象 地址 赋值给 父类型指针 ; 引用 : 父引用 引用 子类对象 , 将 子类对象 赋值给 父类型引用 ; 二...// 子类对象 可以调用 父公有函数 child.funParent(); // 将指向子类对象指针传给接收父指针函数 // 也是可以 fun_pointer...// 通过父指针调用父函数 p_parent->funParent(); // 将指向子类对象指针传给接收父指针函数 // 也是可以 fun_pointer

22220

C++与对象【定义、访问限定符、this指针】

C++是基于面向对象,关注是对象,将一件事情拆分成不同对象,靠对象之间交互完 成。 引入 C语言结构体只能定义变量,在C++,结构体内不仅可以定义变量,也可以定义函数。...在C++更喜欢用class来代替。 定义 class定义关键字,ClassName名字,{}主体,注意定义结束时后面分号不能省略。...内容称为成员:变量称为属性或成员变量; 函数称为方法或者成员函数。...对象模型 对象存储方式 对象只保存成员变量,成员函数存放在公共代码段 计算对象大小 既可以有成员变量,又可以有成员函数。如何计算一个大小?...C++过引入this指针解决该问题,C++编译器给每个“非静态成员函数“增加了一个隐藏 指针参数,让该指针指向当前对象(函数运行时调用该函数对象),在函数体中所有“成员变量操作,都是通过该指针去访问

12310

C++和对象(上篇)

1. 引入 C语言结构体只能定义成员变量,在C++,结构体内不仅可以定义成员变量,也可以定义成员函数。...定义 但是实际上在 C++ 更喜欢用 class 来代替 struct,class定义关键字,内容称为成员:变量称为属性或成员变量; 函数称为方法或者成员函数。...在成员变量,只是对它们进行声明,并没有开空间,所以即使将成员变量设为共有,直接使用也会报错,例如以以上日期例: int main() { Date....结果确实是如此,对于一个来说,每个都有自己对应公共代码区,这个所有成员函数都存放在公共代码区,而不是存放在实例化出来对象,如果存放在每个对象,会导致对象变得很大,并且会有很多重复函数...C++通过引入 this 指针解决该问题,即:C++ 编译器给每个“非静态成员函数“增加了一个隐藏指针参数,让该指针指向当前对象(函数运行时调用该函数对象),在函数体中所有“成员变量操作,都是通过该指针去访问

10010

C++重要知识点小结---2

构造函数按下列顺序被调用: 任何虚拟基构造函数按照它们被继承顺序构造; 任何非虚拟基构造函数按照它们被继承顺序构造; 任何成员对象构造函数按照它们声明顺序调用; 自己构造函数。...所以必须把父所有变量都继承下来,这样既能保护父变量也能使用父函数。 6.继承访问控制 继承分为公共继承、保护继承和私有继承。 在公共继承,基每个成员在子类中保持同样访问方式。...访问控制权限: 私有继承时,基不管是公有的,还是保护或者私有的,一律在子类变成私有成员。 保护继承时,基公共和保护成员在子类变成保护,而基私有的成员在子类变成私有的。...公共继承时,基公共、保护和私有的成员在子类仍保持公共、保护和私有的。 如果不标明继承公共还是保护或者私有,则默认继承是私有的。...派生构造函数必须激活所有基构造函数,并把相应参数传递给它们

68570

C++重要知识点小结---2

构造函数按下列顺序被调用: 任何虚拟基构造函数按照它们被继承顺序构造; 任何非虚拟基构造函数按照它们被继承顺序构造; 任何成员对象构造函数按照它们声明顺序调用; 自己构造函数。...所以必须把父所有变量都继承下来,这样既能保护父变量也能使用父函数。 6.继承访问控制 继承分为公共继承、保护继承和私有继承。 在公共继承,基每个成员在子类中保持同样访问方式。...访问控制权限: 私有继承时,基不管是公有的,还是保护或者私有的,一律在子类变成私有成员。 保护继承时,基公共和保护成员在子类变成保护,而基私有的成员在子类变成私有的。...公共继承时,基公共、保护和私有的成员在子类仍保持公共、保护和私有的。 如果不标明继承公共还是保护或者私有,则默认继承是私有的。...派生构造函数必须激活所有基构造函数,并把相应参数传递给它们

79370

MFC中注释含义

例如,公共成员变量函数可能在多个 public 关键字之下。这是因为 MFC 基于成员变量函数使用而非允许访问类型来分隔它们。...// Attributes属性,特性,特质 MFC 声明 // Attributes 节包含对象公共特性(或属性)。这些特性或属性通常是成员变量或 Get/Set 函数。...“Get”和“Set”函数可以是虚拟,也可以不是虚拟。“Get”函数一般 const,因为大多数情况下它们都没有副作用。这些成员通常是公共;受保护属性和私有属性通常在实现节。...这些函数一般是非 const ,因为它们通常有副作用。它们可以是虚拟,也可以不是虚拟,具体取决于需要。这些成员通常是公共。...例如,CWnd::Create 位于构造函数,因为在使用 CWnd 对象之前,必须首先调用 C++ 构造函数,然后调用 Create 函数来“完整构造”它。这些成员通常是公共

1.1K70

C++和对象概念

参考链接: C++和对象 C++和对象概念  面向对象程序设计   概念:(Object Oriented Programming,缩写:OOP)是一种程序开发方法。...struct不能存放函数,class可以存放成员函数struct默认变量函数都是public,也就是不限制权限,可在结构外任意访问,而class默认privateclass里变量可以先使用可以在定义之前...上面的代码说明两点  和结构体一样,存在内存对齐问题函数不在体内存储,也不存函数指针  函数公共代码区存放,因为所有对象数据不同但是方法是相同,因此不必存储多份。 ...this指针特性:  是 对象 * const 类型是成员函数第一个默认参数,不能显式传递this指针不在对象内存储,且作用域在成员函数内只能在非静态成员函数内使用  什么是 _thiscall...offsetof宏  define offsetof(s,m) (size_t)&(((s *)0)->m)  作用:求出结构体某成员相对结构体偏移位置  解析:首先把0强转为结构体指针类型,用结构体指针获取其成员变量

49630

C++初阶】和对象修炼上

classname { //体:由成员变量和成员函数组成 }; class定义关键字,classname名,{}里主体,体由成员变量和成员函数组成 组成:变量叫做成员变量属性...如果把定义图纸,那么实例化就是拿着图纸建造房子,对象就是我们建造出来房子. 3.class对比struct C++class和C语言中struct对比: 四个角度: 属性:class兼容...成员变量函数不在同一个作用域中,函数不能直接访问成员变量,得传参....+兼容C语法,所以也是支持struct Stack来定义对象,同时C++还支持直接使用Stack定义变量 函数如果被定义在,编译器就会默认把这个成员函数定义内联函数 4.访问限定符...之前我们在第7点已经给大家讲过,成员函数不是存放在对象,而是存放在了公共代码段,不是你,肯定不在你那里找喽,p->Print()只是传递了p地址.同时在成员函数内部this接收到都是nullptr

66740

C++初阶与对象(一):学习与对象、访问限定符、封装、this指针

C++,结构体内不仅可以定义变量,也可以定义函数。...定义关键字,ClassName名字,{ }主体,注意定义结束时后面分号不能省略。...内容称为成员:变量称为属性或成员变量 ; 函数称为方法或者成员函数。...所以需要实例化后,再进行赋值等一系列操作 7.对象模型 7.1对象存储方式 只保存成员变量,成员函数存放在公共代码段(成员函数地址不在对象,成员变量是在) 结论:一个大小,实际就是该类...Init 与 Print 两个成员函数函数没有关于不同对象区分,那当d1调用 Init 函数时,该函数是如何知道应该设置d1对象,而不是设置d2对象 C++通过引入this指针解决该问题,

11710

如何高效编写可维护代码?

此外,除了上述三种,还有一些应用比较广泛方式: 和模块接口:将和模块函数暴露出来,让代码更加清晰。 代码分组:用组来区分不同代码片段。...例如,用 widthPx 来取代 width 以指定宽度单位是像素。 不要使用快捷键 —— a 和 b 都不能作为参数名。 函数封装 接下来,看几个如何将代码封装成函数例子。...multiplier + divisor; 和模块接口 和模块接口 —— 也是面向公共方法和属性 —— 有点像说明如何使用文档。...我特意举这个例子是想说明公共接口如何自文档化。 你能说出这个是如何被调用吗?很显然,这并不明显。 这两个函数都应该换个合理名字以表述它们目的。但即便做到这一点,我们还是不怎么清楚如何使用。...例如,像这篇文章那样,我们应该尽可能将变量定义在靠近使用它地方,并且尽可能将变量分门别。这也可以用来指定不同代码组之间关系,这样更加方便其他人知道他们还需要了解哪些代码组。

55430

C++和对象(上)

面向对象三大特性:封装;继承 ---- 引入 C语言中,结构体只能定义变量,在C++,结构体内不仅可以定义变量,也可以定义函数 下面,我们来看一看代码: #include <iostream...---- 定义 class className { // 体:由成员函数和成员变量组成 }; // 一定要注意后面的分号 class定义关键字,ClassName名字,{}主体...SetDate与Display两个成员函数函数没有关于不同对象区分,那当d1调用SetDate函数时,该函数是如何知道应该设置d1对象,而不是设置d2对象呢?...C++通过引入this指针解决该问题,即:C++编译器给每个“非静态成员函数“增加了一个隐藏指针参数,让该指针指向当前对象(函数运行时调用该函数对象),在函数体中所有成员变量操作,都是通过该指针去访问...为什么❓成员函数不存在对象里,存在于常量区(代码段),编译器调用函数时P不会到p指向对象里找Print()地址. 不发生解引用,因为成员函数地址不在对象,在公共代码区域。

47120

C++必知必会之基础知识-常用关键(3)

START 位域 在C++,位域(bit fields)是一种特殊数据结构,允许将结构体或成员变量按位进行分配。...由于unsigned int通常是4字节(32位),所以MyFlags大小4字节。 在使用位域时,需要注意成员访问权限以及可能内存对齐问题。...需要注意是,extern "C"应该只用于C和C++之间函数和全局变量声明,而不应该用于定义和成员函数。因为成员函数涉及到C++特性,无法通过简单名称修饰解决链接问题。...以下是关于C++struct一些详解: 成员变量:struct可以包含不同类型成员变量,这些成员变量默认是public(公共)访问权限。这意味着结构体成员可以从外部直接访问和修改。...C++除此之外特性还有: 默认访问控制符 public 可以含有构造函数、析构函数 不能含有引用类型成员 不能继承自其他,不能作为基 不能含有虚函数 匿名 union 在定义所在作用域可直接访问

12530

C++核心编程(上)

地址: " << (int)&c_l_b << endl; system("pause"); return 0; } 总结: C++在程序运行前分为全局区和代码区 代码区特点是共享和只读 全局区存放全局变量...在C++函数形参列表形参是可以有默认值。...10; //正确,访问权限是公共 system("pause"); return 0; } 4.1.3 成员属性设置私有 **优点1:**将所有成员属性设置私有,可以自己控制读写权限 **...C++面向对象来源于生活,每个对象也都会有初始设置以及 对象销毁前清理数据设置。...C++成员可以是另一个对象,我们称该成员 对象成员 例如: class A {} class B { A a; } 12345 B中有对象A作为成员,A对象成员 那么当创建B对象时

1.8K30

c++和对象新手保姆级上手教学(上)

c++注重对象比如送外卖,c++就关注商家 买家 骑手等对象,然后每个对象里面又要显示他们状态,比如骑手就有休息,派送,取餐中等,如下图所示:  定义:   c++是兼容c语言,所以在c+...+完全可以像c一样使用struct,同时c++将struct升级成了,我们在里面可以定义函数,升级成后又要兼容c,有点矛盾,所以加了一个新关键字class,所以c++中一般用class来表示...访问权限作用域从该访问限定符出现到下一个访问限定符出现结束(或者结束) 如下图设置访问限定符:  在c++惯例成员变量设置私有,成员函数设置公有,因为惯例一般不要直接修改数据,修改数据都要函数去做...通过上面的测试不难看出,计算大小时没有算Init函数大小,说明成员函数地址没有存放在里面,那它存放在哪里呢? 成员函数地址统一存放在一个公共区域(代码段),避免空间浪费。...继续排除常量区,因为在c++const变量不在常量区 所以正确答案:栈  因为this指针是一个形参,而栈是用来存放  函数返回地址、形参、局部变量、返回类型。 2.下面代码能正常运行吗?

5510

C++OOP对象和

如果这些由C++等利用OOP编写程序,我们可以通过在一个函数调用另一个函数,可以通过构建一个球队,或者建立一个球员对象,通过调用函数方式完成计算。...最后,使用新设计方案创建出程序。 2.抽象和 生活充满了复杂性,处理它们方法就是简化和抽象。...现在,让我们言归正传,就 C++ 编程而言,C++ 数据抽象提供了可能。它们向外界提供了大量用于操作对象数据公共方法,也就是说,外界实际上并不清楚内部实现。...在对象作用域内,公共成员在外部是可访问。您也可以指定成员 private或 protected。 3.2 C++对象定义 提供了对象蓝图,所以基本上,对象是根据来创建。...:" << volume <<endl;   return 0; } 3.4 C++成员函数 成员函数是指那些把定义和原型写在定义内部函数,就像定义其他变量一样。

37830

c++和对象(一)

你不需要知道他们是如何内部操作,只需要与他们交互即可 2. 2.1引入 C语言结构体只能定义变量,在C++,结构体内不仅可以定义变量,也可以定义函数。...,c++将结构体升级为了提供了一种封装数据成员(属性或变量)和成员函数(方法)途径 我们可以直接用stack来定义一个结构体st2: struct stack st1; stack st2; 并且可以把我们需要函数定义在结构体...class className { // 体:由成员函数和成员变量组成 }; class定义关键字,ClassName名字,{}主体,注意定义结束时后面分号不能省略 内容称为成员...,我们需要public修饰 4.两种定义方式 在C++定义时,主要有两种方式:在单个文件定义整个(包括成员变量和成员函数),或者将声明和定义分别放在不同文件(声明定义分离)。...猜想2:只保存成员变量,成员函数存放在公共代码段 每个成员函数地址都是一样,在公共区域存放函数代码更加合理 class A2 { public: void f2() {} }; 这个大小是多少呢

7510

C++和对象(第一篇)

除此之外,在C++: 在C++,结构体内不仅可以定义变量,也可以定义函数。...3.定义 class定义关键字,ClassName名字,{}主体,注意定义结束时后面分号不能省略。...成员函数只保存一份,在对象中保存存放函数地址 只保存成员变量,成员函数存放在公共代码段 对于上述三种存储方式,那计算机到底是按照那种方式来存储,下面我们就来验证一下: 首先提醒大家C++对象大小计算方法和...那先我们就用上面那个Date创建一个对象,看它大小是多少: 所以呢: 没错,正确存储方式是第三种:对象只存储成员变量,不存储成员函数(地址也没有),成员函数存放在公共代码段。...那就有一个问题值得我们思考一下: Date中有 Init 与 Print 两个成员函数函数没有关于不同对象区分,那当d1调用 Init 函数时,该函数是如何知道应该设置d1对象,而不是设置d2

11210

今年面试太难了?2023 年 30 个 OOP 面试问题和答案也许可以帮到你

它旨在通过在编程实现继承、抽象、多态等现实世界实体,现实世界问题提供更简便解决方案。OOPs概念被广泛应用于Java、Python、C++等多种流行语言中。...rollNo; } //设置名称公共设置方法 public void setName(String name){ this.name=name } //设置 rollNo 公共设置方法...在C++,结构体和之间有什么区别? 结构体和之间主要区别在于,在结构体,成员默认为公共访问级别,而在,默认为私有访问级别。...什么是析构函数? 析构函数是一种在对象超出范围或被销毁时自动调用方法。 在C++,析构函数名称与名相同,但前缀(~)波浪线符号。 在Python,析构函数名称为__del__。...什么是虚函数? 虚函数是用于在派生覆盖父方法函数。它用于提供抽象。 在C++,使用virtual关键字声明虚函数。 在Java,每个公共、非静态和非最终方法都是虚函数

33641
领券