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

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

文章目录 一、主构造函数定义临时变量 二、主构造函数中定义成员属性 三、次构造函数 四、构造函数默认参数 一、主构造函数定义临时变量 ---- 在 Kotlin 类中 , 可以在 类声明 时 在 类名后...定义 " 主构造函数 " ; 在 主构造函数 中 , 可以 定义 成员属性 , 并为 成员属性 提供 初始值 ; 在 主构造函数 中 , 可以定义 临时变量 , 临时变量 一般使用 以下划线为开头 的名称...; 代码示例 : class Hello( // 主构造函数, // 下面的两个参数仅仅用于给成员属性赋值, 只使用一次 // 这种变量称为临时变量, 使用下划线开头...---- 在定义 构造函数 时 , 可以为 构造函数 的参数 指定 默认值 , 如果 用户传入了 值参 则 使用用户传入的值 , 如果用户没有传入值 则 使用该 默认值 ; 如果 构造函数 参数有 指定默认值..., 可以不为其传递 值参 , 构造函数中跳过该参数 , 其 后面的参数需要使用 参数名 = 参数值 进行赋值 ; 代码示例 : class Hello( // 主构造函数, 直接在主构造函数中定义属性

4.9K20

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

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

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

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

    ; 此时使用 默认无参构造函数 初始化 B , 就会报错 ; 在一个类中 , 其成员变量是 带有参构造函数 的类型 , 这种情况下没有调用 有参构造函数的机会 , 此时就会出现 编译报错情况 ; 在下面的代码中..., A 只有通过 有参构造函数 A(int age, int height) 进行初始化 , 无法再使用 无参构造函数 ; class A { public: // 带参构造函数 A(int age...是一种用于初始化类的成员变量的方法 ; 构造函数初始化列表 可实现功能 : 为成员变量提供初始值 调用其他 成员变量的 构造函数 来初始化成员变量 构造函数初始化列表语法规则 : 构造函数() : 成员变量名称...(成员变量值) , 成员变量名称(成员变量值) { // 构造函数内容 } 构造函数初始化列表 位置在 构造函数 的 参数列表之后 , 冒号 : 与花括号 {} 之间 ; 使用 逗号 , 分隔 ;...初始化列表中的元素由 成员变量的名称 和 初始值组成 , 使用等号 = 连接 ; 在下面的代码中 , 为 B 类定义了默认的构造函数 , 其中定义了 构造函数 初始化列表 ; 在 初始化列表中 , m_age

    67730

    @Autowired的使用:推荐对构造函数进行注释

    翻译: Spring建议”总是在您的bean中使用构造函数建立依赖注入。总是使用断言强制依赖”。...我们知道:@Autowired 可以对成员变量、方法以及构造函数进行注释。那么对成员变量和构造函数进行注释又有什么区别呢?...@Autowired注入bean,相当于在配置文件中配置bean,并且使用setter注入。而对构造函数进行注释,就相当于是使用构造函数进行依赖注入了吧。莫非是这两种注入方法的不同。...PS:Java变量的初始化顺序为:静态变量或静态语句块–>实例变量或初始化语句块–>构造方法–>@Autowired 那么最开始Spring建议,为何要将成员变量加上final类型呢?...可能是为了防止,在程序运行的时候,又执行了一遍构造函数; 或者是更容易让人理解的意思,加上final只会在程序启动的时候初始化一次,并且在程序运行的时候不会再改变。

    2K10

    @Autowired的使用--Spring规范解释,推荐对构造函数进行注释

    一 在编写代码的时候,使用@Autowired注解是,发现IDE报的一个警告,如下: Spring Team recommends "Always use constructor based dependency...翻译: Spring建议,总是在您的bean中使用构造函数建立依赖注入。总是使用断言强制依赖。 那么是为什么呢?...二 我们可以理一下java的基础点,不考虑父类,初始化的顺序 静态变量或静态语句块–>实例变量或初始化语句块–>构造方法–>@Autowired ps.静态变量或静态语句块的初始化顺序是自上到下的顺序,...解决办法就是使用构造器注入了 private User user; private String schoolId; @Autowired public UserServiceImpl(User user...因为加上final只会在程序启动的时候初始化一次,并且在程序运行的时候不会再改变。

    4.2K30

    C语言结构体类型定义+结构体变量的定义与使用及其初始化+结构体变量作为函数参数

    上一篇文章:返回指针值的函数+指向函数的指针+main()函数的参数 C语言结构体类型定义+结构体变量的定义与使用及其初始化+结构体变量作为函数参数 结构体 引例 结构体变量的定义 结构体变量的使用...结构体变量作为函数参数 结构体变量的初始化 下一篇文章 结构体 引例 输出平均分最高的学生信息 #include struct student { int num; char name...,然后才能进行结构体变量的定义: struct 结构体类型名 结构体变量名; 1 struct student stu1,stu2;//定义两个结构体变量 1 也可以在定义结构体类型的时候同时定义结构体变量...,不能直接用“=”,即s1.name="张三";是错误的,必须使用字符串复制函数strcpy()函数来实现,如:strcpy(s1.name,"张三"); 同一类型的结构体变量间可以赋值 如:...} 1234567891011121314151617181920212223242526272829303132333435363738394041 结构体变量的初始化 结构体变量的初始化一般形式为

    2.4K20

    C++核心准则ES.28: 使用lambda表达式进行变量的复杂初始化,特别是常量变量

    ES.28: Use lambdas for complex initialization, especially of const variables ES.28: 使用lambda表达式进行变量的复杂初始化...,特别是常量变量 Reason(原因) It nicely encapsulates local initialization, including cleaning up scratch variables...这种方式漂亮地封装了局部初始化,包括清理只在初始化过程中需要的临时变量,而不是生成一个不必要的非局部但却不会重用的函数。它也可以用于应该是常量但却需要某些初始化处理的变量初始化....如果可能,将条件压缩为一个由可选项(例如枚举)构成的简单集合并且不要将选择和初始化混用。 Enforcement(实施建议) Hard. At best a heuristic....最好是启发式的。寻找没有初始化的变量的后面跟着为其赋值的循环的情况.

    73430

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

    地方 , 都可以使用 " 公有继承 " 的 派生类 ( 子类 ) 对象 替代 , 该 派生类 ( 子类 ) 得到了 除 构造函数 和 析构函数 之外的 所有 成员变量 和 成员方法 ; 功能完整性 :..." 应用场景 : 直接使用 : 使用 子类对象 作为 父类对象 使用 ; 赋值 : 将 子类对象 赋值给 父类对象 ; 初始化 : 使用 子类对象 为 父类对象 初始化 ; 指针 : 父类指针 指向...); } 2、使用 子类对象 为 父类对象 进行初始化 定义父类对象 , 可以直接使用 子类对象 进行初始化操作 ; // II....类型兼容性原则 : 使用 子类对象 为 父类对象 进行初始化 Parent parent = child; 3、完整代码示例 #include "iostream" using namespace...类型兼容性原则 : 使用 子类对象 为 父类对象 进行初始化 Parent parent3 = child; // 控制台暂停 , 按任意键继续向后执行 system(

    30920

    使用V函数,进行变量引用,得到想要的结果值 》

    目录 一、注意 二、V函数 1.做一个变量的引用 2.用V函数 3.注意 三、总结 一、注意 jmeter中,做功能测试、自动化测试时,你可以使用Beanshell元件。...1.做一个变量的引用: ${__counter(,)} 参考:${__counter(,)}函数的用法 循环次数为3次 用户定义的变量的名称 ${var_${__counter(,)}} 编写http...实际结果是: 要进行两次变量计算。这个方法是办不到,得不到我们想要的结果。...2.用V函数 得到了这样一个V函数:${__V(var_${__counter(,)},)} 这个V函数把它的这个(var_${__counter(,)},)整体进行计算,计算完毕后,得到一个var_...然后再使用$符号和大括号扩起来,进行了变量引用,这样才得到想要的结果值。 http请求:修改了名称和消息体数据 运行成功 3.注意 取样器在运行的时候,HTTP请求里的名称也会进行代码的运算。

    2K20

    C++类和对象(下)

    祖师爷推荐: 尽量使用初始化列表进行初始化,全能又安心 强大的功能靠着周全的规则支撑,初始化列表有很多注意事项(使用规则) ️注意事项 使用方式 ; 开始 , 分隔,() 内写上初始值 注意 初始化列表中的成员只能出现一次...初始化列表中的初始化顺序取决类中的声明顺序 以下几种类型必须使用初始化列表进行初始化 const 修饰 引用 类型 自定义类型,且该自定义类型没有默认构造函数 建议 优先选择使用初始化列表 列表中的顺序与声明时的顺序保持一致...规范使用初始化列表,高高兴兴使用类 ---- explicit关键字 explicit 是新的关键字,常用于修饰 默认构造函数,限制隐式转换,使得程序运行更加规范 ️隐式转换 所谓隐式转换就算编译器在看到赋值双方类型不匹配时...再调用拷贝构造函数,将临时变量的值拷贝给 aa1 我们可以看看打印结果是否真的如我们想的一样 结果:只调用了一次构造函数 难道编译器偷懒了?...并不是,实际这是编译器的优化 与其先生成临时变量,再拷贝,不如直接对目标进行构造,这样可以提高效率 这是编译器的优化行为,大多数编译器都支持 看代码会形象些: A aa1 = 100; //你以为的 A

    16320

    类和对象(下)

    成员变量走初始化列表的逻辑: 显式在初始化列表中初始化的成员变量: 如果你在构造函数的初始化列表中明确地为成员变量指定了初始值,那么这些成员变量将按照提供的值进行初始化。...没有默认构造函数的成员变量:这些类型的成员变量无法使用默认构造函数初始化,所以必须显式初始化。...必须初始化列表的情况:const、引用类型成员变量,以及没有默认构造函数的成员变量必须使用初始化列表初始化。...显式转换:程序员手动进行转换,通常用于当隐式转换不能满足需求时。 static成员 • ⽤static修饰的成员变量,称之为静态成员变量,静态成员变量⼀定要在类外进行初始化。...• 静态成员变量不能在声明位置给缺省值初始化,因为缺省值是个构造函数初始化列表的,静态成员 变量不属于某个对象,不⾛构造函数初始化列表 1. static 成员变量 共享数据:static成员变量是属于整个类的

    7410

    类和对象(下)

    3.注意事项 1.每个成员变量只能在初始化列表出现一次(初始化只能初始化一次) 2.类中包含 引用成员变量 const成员变量 自定义类型成员(没有默认构造函数) ,必须放在初始化列表位置进行初始化,(..._a=5 date d; return 0; } 因为构造函数对于内置类型不处理,对于自定义类型调用它的默认构造函数, 所以定义时必须初始化的包含自定义类型(不带默认构造函数) 3.成员变量在类中的声明次序就是在初始化列表中的初始化顺序...d 内置类型int对于自定义类型A的类型转换,通过构造产生一个类型为A的临时变量,再通过拷贝构造传给b 但是程序运行发现,只进行了两次构造,并没有拷贝构造, 说明C++对于自定义类型产生临时变量...也可以防止隐式类型转换的发生 3.友元 1.友元函数 1.概念 为了在类外面使用类中私有的成员变量,友元提供了突破封装的方式,在类中加入 friend+函数定义 但是这样会增加耦合度,所以不建议多用 2...,再把临时比变量拷贝构传给b 正常来说是进行 一次构造、两次拷贝构造 两次拷贝构造属于一个连续的步骤,所以编译器进行了优化, 最终只进行了 一次构造、一次拷贝构造 4.匿名对象的传值返回 class

    47220

    C++打怪升级(六)- 类和对象入门3

    (expression1), _member(expression2), ... ---- 初始化列表特性 每个构造函数都有一个初始化列表用于对每个成员变量进行初始化; 初始化列表默认是由编译器隐式生成的...因为不管是否使用初始化列表,成员变量都会先通过初始化列表进行初始化; 初始化列表并不能解决所有问题,初始化列表与构造函数内赋初值常常会混合使用; 比如初始时动态申请空间时: class Stack...因为全缺省的默认构造函数功能十分强大,十分好用; 我们在创建类对象时既可以不传参数,完全使用缺省参数,也可以传一部分参数,使用部分缺省参数,也可以传全部参数,不使用缺省参数; class A { public...细化类成员变量的 定义初始化: 类成员变量的 定义初始化 发生在初始化列表阶段 即类成员变量在初始化列表进行 定义初始化 而在构造函数内进行的是类成员变量的赋值和其他必要的操作,故在构造函数内进行的不能称之为...,用于类对象返回时对临时对象进行拷贝构造; 如果拷贝构造也设置成私有的,那么在类外无法调用拷贝构造,也就无法在类外进行拷贝构造,导致类对象返回无法以拷贝构造的方式创建临时类对象,也就是直接无法在类外创建对象了

    63020

    C++第六弹 -- 类与对象下篇(初始化列表 Static成员 友元 内部类 匿名对象)

    (初始化只能初始化一次) 类中包含以下成员,必须放在初始化列表位置进行初始化: 引用成员变量 const成员变量 自定义类型成员(且该类没有默认构造函数时) 尽量使用初始化列表初始化,..., 然后自动进行拷贝构造, 我们使用引用接收, 也就是引用了临时变量, 具有常性, 所以需要加const修饰....如果在函数前面加上关键字explicit则禁止了类型转换,编译器就会报错 用explicit修饰构造函数, 将会禁止构造函数的隐式转换 也就是创建对象不能进行隐式转换创建, 从而法2就无法使用 声明中的缺省值是给初始化列表使用的...练习题 题目一: JZ64 求1+2+3+…+n 思路分析: 按照题目的要求,一般常规方法, 我们都不能使用, 因为创建对象的时候会调用其构造函数, 那我们可以创建n个对象, 然后在其构造函数中进行变量的累加...匿名对象通常用于临时使用的情况,例如在函数调用中。 完, 感谢点赞关注

    10110

    【C++修行之道】类和对象(六)再谈构造函数(初始化列表)| explicit关键字 | static成员 | 友元|匿名对象|拷贝时一些编译器优化

    每个成员变量在初始化列表中只能出现一次(初始化只能初始化一次) 3. 类中包含以下成员,必须放在初始化列表位置进行初始化: 声明给缺省值也可以是其他的值 4. 尽量使用初始化列表初始化。 5....成员变量在类中声明次序就是其在初始化列表中的初始化顺序,与其在初始化列表中的先后次序无关 6.初始化列表,不管你写不写,每个成员对象都会先走一遍 1.4 explicit关键字 单参数构造 多参数构造...它允许在需要类类型对象的地方使用构造函数的参数类型值,编译器会自动调用这个构造函数进行类型转换。 class A { public: // 1....这种对象通常用于临时存储数据或者作为函数参数传递。匿名对象的生命周期仅限于当前语句或表达式的作用域。...例如 A a1 = 1;,在这种情况下,编译器会识别出这是一个对象初始化的过程,可以直接调用构造函数,而不是先创建临时对象再调用拷贝构造函数。 当函数调用跨越不同表达式时,编译器无法进行同样的优化。

    14710

    C++:08---成员变量初始化方式

    成员变量初始化有三种方式: 在构造函数体内赋值初始化 在自定义的公有函数体中赋值初始化(一般用于成员变量的初始化) 在构造函数的成员初始化列表初始化 一、构造函数体内初始化 说明:在构造函数体内的初始化方式...特点: 初始化顺序与书写的在构造函数后的顺序无关,而与成员变量的定义顺序有关(下面有演示案例) 初始化列表初始化优先于构造函数内的代码执行顺序 写在构造函数的后面,随着构造函数的执行而执行 初始化顺序...: 多个成员之间用逗号隔开,括号内为形参 一般只对无动态内存的成员、const成员、引用初始化(const成员、引用成员必须在初始化列表初始化) 成员初始化列表初始化效率更高(下面有演示案例) 有动态内存的成员必须在构造函数内部进行初始化...,临时对象析构释放 } }; 但是如果使用下面的成员初始化列表初始化,那么就省去了创建临时对象再拷贝的过程,因此成员初始化列表初始化的效率更高 class Word{ string _...而赋值是先初始化一个临时变量,再赋值。前者效率高

    45720

    C++:20---成员变量初始化方式

    成员变量初始化有三种方式: 在构造函数体内赋值初始化 在自定义的公有函数体中赋值初始化(一般用于成员变量的初始化) 在构造函数的成员初始化列表初始化 一、构造函数体内初始化 说明:在构造函数体内的初始化方式...特点: 初始化顺序与书写的在构造函数后的顺序无关,而与成员变量的定义顺序有关(下面有演示案例) 初始化列表初始化优先于构造函数内的代码执行顺序 写在构造函数的后面,随着构造函数的执行而执行 初始化顺序...: 多个成员之间用逗号隔开,括号内为形参 一般只对无动态内存的成员、const成员、引用初始化(const成员、引用成员必须在初始化列表初始化) 成员初始化列表初始化效率更高(下面有演示案例) 有动态内存的成员必须在构造函数内部进行初始化...: Word(){ _name=0;//先创建一个临时string对象,赋值为0,然后拷贝给_name _cnt=0; //构造函数结束之后,临时对象析构释放 } }; 但是如果使用下面的成员初始化列表初始化...(0){} //直接初始化_name,不创建临时对象 }; 四、初始化方式总结 根据上面的三种方式,总结出:成员初始化列表初始化成员才是真正意义上的初始化,其他两种方式都是为赋值 初始化和赋值涉及到底层效率的问题

    2.1K30

    C++的魔法世界:类和对象的终章

    一、再探构造函数 类和对象(中)里介绍的构造函数,使用的是赋值实现成员变量的初始化。而构造函数还有另一种初始化方法,就是使用初始化列表。...,只实现了构造函数,在Myqueue中需要对两个栈类的成员变量进行初始化,需要调用它的默认构造而栈类没有实现,从而采用初始化列表。...而实际的流程:Date里实现的有通过整形为形参实现的单参数构造函数,尝试使用一个int对象给一个Date对象赋值后,编译器使用int对象调用构造函数生成一个Date类型的临时对象,最后通过临时对象调用拷贝构造函数实现对...注意:编译器生成的临时对象具有常性 如下图:前面提过,隐式类型转换实际上通过调用构造函数生成临时对象,而临时对象又去调用拷贝构造完成赋值的过程,这里的临时对象具有常性,下图的**普通d1对象尝试对一个具有常性的对象进行引用...静态成员变量不能在声明位置给缺省值初始化,这个缺省值是构造函数初始化列表使用的,而静态成员变量不属于某个对象,不能走构造函数初始化列表。

    5000

    类和对象:C++11新特性与知识补充

    引用成员变量(定义的时候必须指定引用对象),const成员变量(定义后的值再不可以改变),以及没有默认构造的类类型成员变量(无法自己构造),必须放在初始化列表进行初始化,否则会造成编译器报错; 成员变量声明位置缺省值...这个中间变量用于在转换过程中存储临时结果,然后再将结果传递给目标对象。...编译器一般会对该过程进行优化,不会创建临时变量而是直接构造,但是也有必须创建临时变量的时候: A aa1 = 1; // 隐式类型转换:int -> A aa1.Print(); const A& aa2...这里也进行了隐式类型转换,但由于是引用绑定,首先调用了 A(int a1) 构造函数生成了一个临时对象,然后调用了拷贝构造函数将临时对象绑定到 aa2。...,因为缺省值是个构造函数初始化列表的,静态成员 变量不属于某个对象,不⾛构造函数初始化列表。

    9810

    今天你学C++了吗——C++中的类与对象(第四集)

    再探构造函数(初始化列表) 前面我们提到了构造函数是用来初始化操作的成员函数,当我们初始化成员变量主要是使用函数体内赋值~构造函数初始化还有⼀种方式,就是使用初始化列表~ 初始化列表的使用方式...y的值进行初始化~ _c没有在初始化列表显示初始化,在声明的地方得到 缺省值进行初始化~ _d走初始化列表使用形参m进行初始化~ 最后是到函数体内部,又修改了_a的值~_...我们一起来看看~ 》 使用static修饰的成员变量 ,我们称之为 静态成员变量 ,静态成员变量 必须要在类外进行初始化(它不走初始化列表,也不走构造函数) 例: class Example...,我们知道缺省值是给构造函数初始化列表的,但是静态成员 变量不属于某个对象,不走构造函数初始化列表~ 所以上面的代码类的大小就为4,静态成员变量存在于静态区里面~ 》 如何访问公有静态成员变量呢...使用static还是有用处的~ 构造和析构顺序 构造函数和析构函数调用遵循下面的规则: 1.main函数前全局对象先初始化调用构造,局部对象先定义的先构造(初始化),静态变量在第一次定义的地方初始化

    5610
    领券