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

【C++】C++ 类中的 this 指针用法 ② ( 常量成员函数 | const 修饰成员函数分析 )

一、常量成员函数 1、const 修饰成员函数分析 在 C++ 类中 , 普通的非静态成员函数 , 可以使用 const 进行修饰 , 在 下面的 Student 类中 , 定义了 void fun(int...在 * 右边修饰的是指针本身 ; 代码示例 : class Student { public: // 使用 const 修饰 类的成员函数 // const 关键字可以 // 在 void...* pThis, int age, int height) // 左数右指 , const 在 * 左边修饰的是内存中的数据, const 在 * 右边修饰的是指针本身 void fun(int...; // 身高 如果 成员函数 被 const 关键字 声明为 常量成员函数 , 则在该函数中 不能修改 类对象中的 任何成员变量 ; class Student { public: void fun..." << endl; } // 使用 const 修饰 类的成员函数 // const 关键字可以 // 在 void fun(int age, int height) 之后 , 大括号之前

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

    OC代码规范2——在类的头文件中尽量少引入其他头文件

    解决该问题的方案就是:在类的.h文件中使用@class来声明引用类,然后在.m文件中再使用#import来导入引用类。...总结 之前我写过一篇本文主题的文章:Effective Objective-C 2.0——在类的头文件中尽量少引用其他头文件,该文章举的例子是错误的。下面我做一下阐述。 错误片段如下: ?...所以,不要在当前类的头文件中使用#import引入其他的类,因为如果引入类的头文件中也import了其他的杂七杂八的类,那么当前类就会引入许多根本用不到的类,这势必会增加编译时间。...所以,在头文件中是用#import导入引入类,会导致如下两个问题: 1,可能会引入许多根本用不到的内容,增加编译时间; 2,容易引起循环导入,进而导致编译错误。...因此,我们在类的头文件中少使用import引入其他的头文件,而是使用@class来声明一个类。 以上。

    2.7K20

    熟悉OC--2:在类的头文件中尽量少引入其他头文件

    OC中类的标准方式 #import @interface Person : NSObject @property (nonatomic,copy) NSString...property (nonatomic,copy) NSString *lastName; @end #import "Person.h" @implementation Person @end 利用@Class在类的头文件中可以减少编译时间...当我们在实际工作中,可能需要创建一个名为Student的新类,然后在Person的类中应该有一个Student的属性,一般做法是引入在Person.h文件中引入Student.h #import 中,那么就会引入Student.h的所有文件,有很多根本用不到的内容,反而增加了编译的时间 有时候必须在头文件中引入其他头文件 如果你写的类, 集成某个类..., 则必须引入定义那个父类的头文件,或者是你声明的类遵从某个协议, 那么该协议必须有完整定义, 而且不能用向前声明, 向前声明只能告诉编译器有某个协议, 而此时编译器却需要知道该协议中定义的方法 参考

    18310

    【C++】构造函数分类 ② ( 在不同的内存中创建类的实例对象 | 栈内存中创建实例对象 | new 关键字创建对象 )

    一、在不同的内存中创建类的实例对象 1、栈内存中创建实例对象 在上一篇博客 【C++】构造函数分类 ① ( 构造函数分类简介 | 无参构造函数 | 有参构造函数 | 拷贝构造函数 | 代码示例 - 三种类型构造函数定义与调用...栈内存中的 变量 Student s1 ; 这些都是在 栈内存 中创建 类的实例对象 的情况 ; // 调用无参构造函数 Student s1; // 打印 Student s1 实例对象值..., 会自动将栈内存中的实例对象销毁 ; 栈内存中 调用 构造函数 创建的 实例对象 , 不需要关注其内存占用 ; 2、堆内存中创建实例对象 在 栈内存 中声明 类 的 实例对象 方式是 : 该 s1...实例对象存放在栈内存中 , 会占用很大块的栈内存空间 ; Student s1; 在 堆内存 中声明 类 的 实例对象 方式是 : 该 s2 实例对象是存放在堆内存中的 , 栈内存中只占 4 字节的指针变量大小...; Student* s2; 在 C++ 语言中 , 可以使用 new 关键字 , 调用有参构造函数 , 创建类的 实例对象 ; 在下面的 C++ 代码中 , 声明并定义了 MyClass 类 , 该类定义了一个有参构造函数

    18920

    一文轻松掌握Python语言命名规则

    和C/C++、Java等语言一样,python在命名上也有一套约定俗成的规则,符合规范的命名可以让程序的可读性大大增加,从而使得代码的逻辑性增强,易于自己和其他协作者在以后的拓展中理解代码的意义,从而提高编写代码的效率...__ == '__main__': count = 0 school_name = '' 2.5.常量(constant)的命名 如果我们想用一个符号来代表常量(值是不变的量,比如光速、...3.2.双下划线开头的命名 以双下划线(two underlines)开头的类变量,表示为类的私有成员,不能被导入和其他类变量访问。 对于类中的方法,使用双下划线开头开头表示子类不能覆写该方法。...魔法方法是python内置方法,不需要主动调用,存在的目的是为了给python的解释器进行调用 几乎每个魔法方法都有一个对应的内置函数,或者运算符,当我们对这个对象使用这些函数或者运算符时就会调用类中的对应魔法方法...当你想让自己定义的对象也可以像Python内置的对象一样使用内置的一些函数或操作符(比如len、add、+、、==等)时,你可以定义该类方法。

    47630

    一文轻松掌握python语言命名规则(规范)

    和C/C++、Java等语言一样,python在命名上也有一套约定俗成的规则,符合规范的命名可以让程序的可读性大大增加,从而使得代码的逻辑性增强,易于自己和其他协作者在以后的拓展中理解代码的意义,从而提高编写代码的效率...3.2.双下划线开头的命名 以双下划线(two underlines)开头的类变量,表示为类的私有成员,不能被导入和其他类变量访问。 对于类中的方法,使用双下划线开头开头表示子类不能覆写该方法。...魔法方法是python内置方法,不需要主动调用,存在的目的是为了给python的解释器进行调用,几乎每个魔法方法都有一个对应的内置函数,或者运算符,当我们对这个对象使用这些函数或者运算符时就会调用类中的对应魔法方法...当你想让自己定义的对象也可以像Python内置的对象一样使用内置的一些函数或操作符(比如len、add、+、、==等)时,你可以定义该类方法。...下划线变量(方法)的使用,往往和面向对象编程中类(class)的设计相关,更多更深入的知识,可以参考 这篇博客。

    9.7K30

    深入理解JVM和GC

    ,它一种任务委派模式 先从自定义的ClassLoader看是否有,没有App中看, 在Extension中看,再Bootstrap中看,都没有,Bootstrap看自己能不能加载,不能就交给Extension...对于任意一个类,都需要由加载它的类加载器和这个类本身来一同确立其在Java虚拟机中的唯一性 两个实例各自对应的同名的类的加载器必须是同一个。...** 元空间Meta Space (>=1.8) ​ 字符串常量在堆中,会触发FGC清理 用来替换掉永久代(指HotSpot VM) ​ 物理上在直接内存 5.1 运行时常量池...在Java语言中,可以作为GCRoots的对象包括下面几种: (1). 虚拟机栈(栈帧中的局部变量区,也叫做局部变量表)中引用的对象。 (2). 方法区中的类静态属性引用的对象。 (3)....JVM通过逃逸分析确定该对象不会被外部访问,如果不会逃逸可以将该对象在栈上分配内存 栈上分配的好处是可以在函数调用后自行销毁,而不是GC介入,从而提升了系统的性能。

    51420

    Python中的__init__()方法整理中(两种解释)

    ,] 我们在列表中枚举出一些牌的类、牌值和花色。从长远来说,我们需要更智能的工厂函数来创建Card实例;用这个方法枚举52张牌无聊且容易出错。在我们接触工厂函数之前,我们看一些其他问题。...使用init()创建显式常量 可以给牌定义花色类。在二十一点中,花色无关紧要,简单的字符串就可以。 我们使用花色构造函数作为创建常量对象的示例。...在某些情况下,我们会有一个在初始化或配置文件中创建的常量对象池,或者我们可以基于命令行参数创建常量对象。我们会在第十六章《通过命令进行复制》中获取初始化设计和启动设计的详细信息。...使用__init__()创建显而易见的常量 可以给牌定义花色类。在二十一点中,花色无关紧要,简单的字符串就可以。 我们使用花色构造函数作为创建常量对象示例。...在某些情况下,我们会有一个在初始化或配置文件中创建的常量对象池,或者我们可以基于命令行参数创建常量对象。我们会在第十六章《命令行处理》中获取初始化设计和启动设计的详细信息。

    2.7K60

    Python中的__init__()方法整理中(两种解释)

    ,] 我们在列表中枚举出一些牌的类、牌值和花色。从长远来说,我们需要更智能的工厂函数来创建Card实例;用这个方法枚举52张牌无聊且容易出错。在我们接触工厂函数之前,我们看一些其他问题。...使用init()创建显式常量 可以给牌定义花色类。在二十一点中,花色无关紧要,简单的字符串就可以。 我们使用花色构造函数作为创建常量对象的示例。...在某些情况下,我们会有一个在初始化或配置文件中创建的常量对象池,或者我们可以基于命令行参数创建常量对象。我们会在第十六章《通过命令进行复制》中获取初始化设计和启动设计的详细信息。...使用__init__()创建显而易见的常量 可以给牌定义花色类。在二十一点中,花色无关紧要,简单的字符串就可以。 我们使用花色构造函数作为创建常量对象示例。...在某些情况下,我们会有一个在初始化或配置文件中创建的常量对象池,或者我们可以基于命令行参数创建常量对象。我们会在第十六章《命令行处理》中获取初始化设计和启动设计的详细信息。

    6.5K50

    约瑟夫问题与魔术(四)——魔术《10张牌的巧合》

    在前面的三篇文章中,我们完成了约瑟夫问题数学部分的解析,相信已经令数学爱好者们大呼过瘾,让魔术爱好者们一头雾水了,相关内容请戳: 约瑟夫问题与魔术(三)——终极数学推导 约瑟夫问题与魔术(二)——数学结构解析...当然,从表演层面看,这类数学类操作的引入制造的神奇和带来的冗余之间需要有个很好的平衡,比如当张数过多的时候,需要引入一些故事来消磨这里面的无聊感;还可以尝试把这个原理和其他的魔术方法或数学原理多重组合,...结束语 如果按照三类数学原理中的常函数,恒等式和通信编码函数来分类,本魔术应该是通信编码函数的过程。我们识别了观众的动作,并把它转化为了后续不同的行动。...但是,由于这里的不同动作的每一项,观众都无从判断是否足够特殊和有信息量,感觉就像是预设的流程一样,使得最后构造出的这个常数位置,效果变化为巧合的同时,过程中看不出任何和前面观众选择有联系的通信函数。...原因是,一方面,数观众放置在第几张,是一个暗通信,本就很隐蔽;另外,对此通信的编码处理,也通过上述跳蛙原理和约瑟夫过程来包装得完全找不到函数构造的逻辑。

    63531

    跟我学 Solidity:关于变量

    在本文中,我们将研究 Solidity 中的变量,它们的类型,它们的存储方式以及如何使用它们。...在Solidity[5]中,我们有两种类型的变量: 状态变量 这些变量在函数外部声明(例如类的属性),并永久存储在以太坊区块链中,更具体地说存储在存储 Merkle Patricia 树中,这是形成帐户状态的信息的一部分...public:状态变量也可以在定义合约的外部访问,因为编译器会自动创建一个与该变量同名的 getter 函数。 internal:状态变量在定义的合约以及所有继承合约都是可见的。...在练习应用所学知识之前,我想提到一下,Solidity 中的this关键字引用了当前合约的类型,并且可以明确转换为地址,正如我们在合约实例中看到的那样。...下次,我们将讨论复杂的类型,并揭示上一代码中我在string旁边使用的memory关键字背后的奥秘。因此,如果你想了解更多信息,请坚持学习,并在下一篇文章中见。

    57720

    夯实Java基础系列18:深入理解Java内部类及其实现原理

    , 参数的类型是外部类的类型, 在构造方法内部使用这个参数为1中添加的成员变量赋值;   3 在调用内部类的构造函数初始化内部类对象时, 会默认传入外部类的引用。...非静态内部类的作用: 1 内部类继承自某个类或实现某个接口,内部类的代码操作创建其他外围类的对象。所以你可以认为内部类提供了某种进入其外围类的窗口。...总结一下Java类代码加载的顺序,万变不离其宗。 规律一、初始化构造时,先父后子;只有在父类所有都构造完后子类才被初始化规律二、类加载先是静态、后非静态、最后是构造函数。...、java类只有在类字节码被加载后才可以被构造成对象实例 成员内部类 在方法中定义的内部类称为局部内部类。...,进行替换,将无法确定的值放到了内部类的常量池中,并在构造函数中将其从常量池取出到字段中。

    1.2K10

    函数式编程的优与劣

    这些语言都有函数式的特性,但不是函数式语言。我的经验之谈,函数式语言,如Erlang或ML拥有其他主流语言缺少的特性,能让编程更加安全的特性。...函数的每个变量在每次调用中绑定,这使得变量绑定更易于管理。下面是个伪代码例子: ? 这里,我们定义了一个函数looper()对列表内容求和。 第一个步骤是基础步骤——如果列表为空,我们返回0。...你在Ruby或JavaScript中只需要把基础步骤放在归纳步骤前面就行。 常量赋值 这点在函数式语言中很难实现。毕竟用不可变的值表示可变的状态非常困难。你又该怎么办呢?...你让作用域很小,只在函数调用时绑定必须的变量。你不能编写修改状态的代码,比如在一系列循环中。你只能在函数调用时绑定状态,然后递归。通过这种方式,你可以维护状态改变,在绑定状态变量值时很难出现错误。...相比那些所谓拥有函数式编程的语言,这就是你将在真正函数式语言中看到的两点关键不同点。函数式程序设计让你的重用能力更上一层楼,使代码更清晰,不过在没有优化的运行环境中会有潜在的性能代价。

    77710

    代码重构的场景总结

    开发者不去思考这些功能是不是应该放在这同一个类中,导致这些类会变得很臃肿,造成一个类几千行,让下一个接盘侠欲哭无泪。 臃肿的方法 好几十上百行的一个函数堆在一块,用面向过程的思想来写代码。...层层嵌套的判断 如果逻辑不复杂尽量减少if-else的分支包裹,他人太难阅读。比如不满足条件了直接return,不走其他代码,这样可以减少一层嵌套。 满篇跑的常量值 一个类里面出现各种未命名的常量值。...当一个方法被其他类使用比在它所在类中的使用还要频繁时,我们就需要使用迁移方法重构了——将方法迁移到更频繁地使用它的类中。...在继承的体系中,当多个类使用了相同或类似的方法,就可以考虑将该方法抽取到基类,没有基类就创建一个。字段提升同方法。 降低方法 即父类抽象方法让多个子类实现。...当然头脑灵活的忽略这条。 去除东北乱炖的Util类 当我们在写代码中偶然间需要抽出公用方法时,一时之间找不到合适的类去放置,然后就随意地放进了XXUtil或XXManager类中。

    73430

    函数式编程的优与劣

    这些语言都有函数式的特性,但不是函数式语言。我的经验之谈,函数式语言,如Erlang或ML拥有其他主流语言缺少的特性,能让编程更加安全的特性。...函数的每个变量在每次调用中绑定,这使得变量绑定更易于管理。下面是个伪代码例子: ? 这里,我们定义了一个函数looper()对列表内容求和。 第一个步骤是基础步骤——如果列表为空,我们返回0。...你在Ruby或JavaScript中只需要把基础步骤放在归纳步骤前面就行。 常量赋值 这点在函数式语言中很难实现。毕竟用不可变的值表示可变的状态非常困难。你又该怎么办呢?...你让作用域很小,只在函数调用时绑定必须的变量。你不能编写修改状态的代码,比如在一系列循环中。你只能在函数调用时绑定状态,然后递归。通过这种方式,你可以维护状态改变,在绑定状态变量值时很难出现错误。...相比那些所谓拥有函数式编程的语言,这就是你将在真正函数式语言中看到的两点关键不同点。函数式程序设计让你的重用能力更上一层楼,使代码更清晰,不过在没有优化的运行环境中会有潜在的性能代价。

    67520

    夯实Java基础系列18:深入理解Java内部类及其实现原理

    , 参数的类型是外部类的类型, 在构造方法内部使用这个参数为1中添加的成员变量赋值; 3 在调用内部类的构造函数初始化内部类对象时, 会默认传入外部类的引用。...总结一下Java类代码加载的顺序,万变不离其宗。 规律一、初始化构造时,先父后子;只有在父类所有都构造完后子类才被初始化 规律二、类加载先是静态、后非静态、最后是构造函数。...规律四、java类只有在类字节码被加载后才可以被构造成对象实例 成员内部类 在方法中定义的内部类称为局部内部类。...可以看到,内部类其实拥有外部类的一个引用,在构造函数中将外部类的引用传递进来。 匿名内部类为什么只能访问局部的final变量?...可以看到,java将编译时已经确定的值直接复制,进行替换,将无法确定的值放到了内部类的常量池中,并在构造函数中将其从常量池取出到字段中。

    41910

    String类型在JVM中的内存分配

    在jdk1.7之前(不包括1.7),Java的常量池是在方法区的地方,方法区是一个运行时JVM管理的内存区域,是一个线程共享的内存区域,它用于存储已被虚拟机加载的类信息、常量、静态常量等。...运行时常量池是方法区的一部分。 来看一个图: (图片来自https://www.cnblogs.com/ysocean/p/8571426.html) ? 关于其他的内存分布就不在这介绍了。...但我们之前在《thinking in Java》中看到的是说JVM为了优化这个字符串相加的过程,在“+”这个操作符的重载中自动引入了StringBuilder类喔。...String s1 = new String("he")+new String("llo"); 这个代码中,首先,new String("he"),先在常量池中看,发现没有这个"he"常量,于是建一个...简单的说,就是往常量池放的东西变了:原来在常量池中找不到时,复制一个副本放到常量池,1.7后则是将在堆上的地址引用复制到常量池。 当然这个时候,常量池被从方法区中移出来到了堆中。

    2.9K41
    领券