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

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

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

6.6K20

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

一、类对象作为成员变量时的构造函数问题 1、问题描述 如果 一个类 A 的对象 作为 另外一个类 B 的成员变量时 , 在以下场景会报错 : 为类 A 定义 有参的 构造函数 , 那么 A 的无参默认构造函数就失效了...; 此时使用 默认无参构造函数 初始化 B , 就会报错 ; 在一个类中 , 其成员变量是 带有参构造函数 的类型 , 这种情况下没有调用 有参构造函数的机会 , 此时就会出现 编译报错情况 ; 在下面的代码中...是一种用于初始化类的成员变量的方法 ; 构造函数初始化列表 可实现功能 : 为成员变量提供初始值 调用其他 成员变量的 构造函数 来初始化成员变量 构造函数初始化列表语法规则 : 构造函数() : 成员变量名称...(成员变量值) , 成员变量名称(成员变量值) { // 构造函数内容 } 构造函数初始化列表 位置在 构造函数 的 参数列表之后 , 冒号 : 与花括号 {} 之间 ; 使用 逗号 , 分隔 ;...初始化列表中的元素由 成员变量的名称 和 初始值组成 , 使用等号 = 连接 ; 在下面的代码中 , 为 B 类定义了默认的构造函数 , 其中定义了 构造函数 初始化列表 ; 在 初始化列表中 , m_age

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

    Dart 中的类的定义、构造函数、私有属性和方法、set与get、初始化列表

    Dart是一门使用类和单继承的面向对象语言,所有的对象都是类的实例,并且所有的类都是Object的子类。 1. Dart类的定义 ? 2. Dart类的构造函数 ? 3....Dart中的命名构造函数 ? 4. Dart中将类抽离成一个单独的模块 首先将模块写到一个单独的文件中,如下图所示为public文件夹下的Person.dart为一个单独的类。 ?...在文件中引入public下的Person.dart文件,然后实例化。 ? 5....需要注意的是,定义为私有属性和私有方法的类必须要抽离放在一个单独的文件中,然后才能真正起到私有的效果。 首先将含有私有属性或私有方法的类放在一个单独的模块中。 ?...在文件中引入含有私有属性和私有方法的类。 ? 6. Dart中get与set修饰符 ? 7. Dart中的初始化列表 Dart中可以在构造函数体运行之前初始化实例变量。 ?

    7.2K40

    六、类和对象

    private:成员只能被同一个类中的其他成员访问。 类的创建和对象的初始化 在C++中,类的创建是通过class关键字来完成的,而对象的初始化则涉及到类的构造函数。...Rectangle类有两个私有成员变量width和height,以及几个公有成员函数,包括两个构造函数、计算面积和周长的方法,以及可能的setter和getter方法。...初始化对象 要创建一个Rectangle类的对象,你需要使用类的构造函数。构造函数是一种特殊的成员函数,它在创建类的对象时自动调用。...struct的构造器是隐式的,编译器会自动生成一个无参数的构造函数,即使成员变量没有初始化,编译器也不会报错。...通过包含 MyClass.h,MyClass.cpp 可以访问 MyClass 的声明,并为其成员函数提供实现。这种分离使得代码更加模块化,并且可以在多个源文件中重用头文件中的类声明。

    30710

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

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

    1.2K20

    你需要知道的 JavaScript 类(class)的这些知识

    在Java或Swift等语言中使用的传统类作为创建对象的蓝图,在 JavaScript 中不存在,原型继承仅处理对象。 原型继承可以模拟经典类继承。...用于实例化类的参数成为构造函数的参数: class User { constructor(name) { name; // => '前端小智' this.name = name;...,并为其分配一个初始值。...当字段在构造函数中隐式创建时,就像前面的场景一样,可能获取所有字段。必须从构造函数的代码中破译它们。...类和原型 必须说 JS 中的类语法在从原型继承中抽象方面做得很好。但是,类是在原型继承的基础上构建的。每个类都是一个函数,并在作为构造函数调用时创建一个实例。 以下两个代码段是等价的。

    79510

    【连载】重温C++之类与对象的实现(第二篇)

    2)类构造与析构 大家在学习C++的时候一定会觉得这两个名词有点变扭,其实也不难理解,把我们创建的对象比作一张手机电话卡,我们在初次使用的时候主要进行身份登记、并为你分配一个手机号码,办理手机套餐等等...解析一下 : 一个类的构造函数和析构函数实现的基本形式如上面的代码所示,其函数名称和类名是完全一致的,对于构造函数是可以含有参数的,不过没有返回值类型声明,析构函数两者都没有;他们都可以分别在对象创建和销毁的时候自动调用...注意一点 : 我们类中可以包含其他类实例化对象,实例化类的时候也会调用对应的构造和析构函数,那么调用的顺序和栈有点类似,先调用成员的构造,然后调用自身构造,调用析构函数正好与构造函数调用顺序相反。...3)类也可以有自己的成员 通过上面的学习我们知道,类实例化的每个对象都会拥有各自的成员和方法,也就是说对象的成员都属于对象,每个对象使用类中定义的成员和方法是相互独立的,而我们的类是否拥有自己的成员呢...类的静态成员分为成员变量和成员函数,我们回头想想C语言,C语言中函数里面定义静态变量,其分配的内存空间是单独的,而非栈中,那么C++的静态变量也是类似的,其具有独立的内存,其属于类,而不再属于具体的对象

    36740

    后台开发:核心技术与应用实践 -- C++

    ):基类的公用成员和保护成员在派生类中成了私有成员,其私有成员仍为基类私有 受保护的继承(protected inheritance):基类的公用成员和保护成员在派生类中成了保护成员,其私有成员仍为基类私有...同时,无论哪一种继承方式,在派生类中是不能访问基类的私有 成员的,私有成员只能被本类的成员函数所访问,毕竟派生类与基类不是同一个类 构造派生类的对象时,必须对基类数据成员、新增数据成员和成员对象的数据成员进行初始化...派生类的构造函数必须要以合适的初值作为参数,隐含调用基类和新增对象成员的构造函数,来初始化它们各自的数据成员,然后再加入新的语句对新增普通数据成员进行初始化。...派生类构造函数必须对这3类成员进行初始化,其执行顺序是这样的: 先调用基类构造函数; 再调用子对象的构造函数; 最后调用派生类的构造函数体 当派生类有多个基类时,处于同一层次的各个基类的构造函数的调用顺序取决于定义派生类时声明的顺序...(自左向右),而与在派生类构造函数的成员初始化列表中给出的顺序无关。

    1.5K10

    OC-基础总结(一)

    框架 一个功能集苹果或者第三方事先将一个协成员在开发程序的时候经常要用到的功能事先写好。把这些功能封装在一个类或者函数中,这些函数和类的集合就叫做框架。...@private : 私有,被其修饰的属性只能在本类的内部访问。 @protected: 受保护的 被其修饰的属性只能在本类以及本类的子类中访问。只能在本类和子类的方法实现中访问。...自动生成这个属性的 setter getter方法的声明和实现。直接将参数的值赋值给自动生成的私有属性,直接返回生成的私有属性的值。...new方法 创建对象,我们之前通过new方法 类名 *指针名 = [类名 new]; new实际上是1个类方法,其作用为: 创建对象。 初始化对象。 把对象的地址返回。...作用: 初始化对象。 init方法 作用: 初始化对象,为对象的属性赋初始值,这个init方法我们叫做构造方法。 init方法做的事情:初始化对象,并为对象的属性赋默认值。

    1.3K110

    C++从入门到精通——初步认识面向对象及类的引入

    类的引入是面向对象编程中的一个核心概念。通过类,我们可以创建具有相同属性和行为的对象,从而实现代码的重用和模块化。类定义了对象的结构和行为,包括对象的属性(数据成员)和方法(成员函数)。...通过创建类的对象,我们可以实例化该类并使用类的成员函数来操作对象的数据。类提供了一种封装数据和功能的机制,使得代码可以更加模块化和可维护。 类名在C++中是用来标识该类的唯一标识符。...在main函数中,我们创建了一个Person对象p1,并为其成员变量赋值,然后通过调用p1.display()函数来显示该对象的信息。...在main函数中,我们创建了一个Person类型的结构体变量p1,并为其成员变量赋值。然后,在display函数中,我们通过p1对象直接调用成员函数来显示该结构体的信息。...在默认构造函数中,将name初始化为"Unknown",将age初始化为0。在主函数中,创建了一个Person对象person,由于没有提供任何参数,因此使用了默认构造函数进行初始化。

    31610

    C#基础知识系列五(构造函数)

    4、结构类型的构造函数与类的构造函数类似,但是 structs 不能包含显式默认构造函数,因为编译器将自动提供一个构造函数。此构造函数会将struct中的每个字段初始化为默认值。   ...只有当 struct 用 new 实例化时,才会调用此默认构造函数。 实例构造函数 使用 new 表达式创建某个类的对象时,会使用实例构造函数创建和初始化所有实例成员变量。...私有构造函数 私有构造函数是一种特殊的实例构造函数。 它通常用在只包含静态成员的类中。 如果类具有一个或多个私有构造函数而没有公共构造函数,则其他类(除嵌套类外)无法创建该类的实例。...当没有实例字段或实例方法(如 Math 类)时或者当调用方法以获得类的实例时,私有构造函数可用于阻止创建类的实例。 如果类中的所有方法都是静态的,可考虑使整个类成为静态的。...在创建第一个实例或引用任何静态成员之前,将自动调用静态构造函数来初始化类。 无法直接调用静态构造函数。 在程序中,用户无法控制何时执行静态构造函数。

    1.1K30

    Swift基础语法(三)

    所谓析构函数,就是在销毁对象的时候调用的函数。 构造函数的介绍 构造函数用于初始化一个类的实例(创建对象)。 在创建一个类的对象的时候,必然会调用构造函数。...默认构造函数 在创建类或者结构体的实例的时候,必须为所有的存储属性设置一个初始值,如果不在定义的时候初始化值,那么就要在构造函数中赋初始化值。...默认构造函数和自定义成员构造函数的函数名都是init,二者的不同点在于: 默认构造函数没有参数,而自定义的成员构造函数是有参数的。...需要注意的是,前面我们也提到,结构体的成员构造函数是编译器默认提供的,不需要程序员手动去构建。此时我们在创建结构体实例的时候既可以使用默认构造函数来创建,也可以使用成员构造函数来实现。...但是如果我们手动在结构体中写了构造函数,那么一定要同时写默认构造函数和成员构造函数,如果只写其一的话,那么在创建实例的时候就只能通过写的那个构造函数来创建。

    2.2K40

    Spring6框架中依赖注入的多种方式(推荐构造器注入)

    依赖注入(DI)是一种过程,对象通过构造函数参数、工厂方法的参数或在对象实例构建后设置的属性来定义它们的依赖关系(即与其一起工作的其他对象)。容器在创建bean时注入这些依赖关系。...这个过程基本上是bean本身不再通过直接构造类或使用Service Locator模式控制其依赖项的实例化或位置,因此被称为控制反转(Inversion of Control)。...基于构造函数的依赖注入基于构造函数的依赖注入是Spring6中的一种依赖注入策略,主要用于确保在对象创建时其必需依赖已经得到初始化。在构造函数注入中,对象的依赖关系明确地通过构造函数的参数传递给对象。...这意味着在实例化一个类时,Spring IoC容器会分析构造函数签名中的参数类型,然后从容器中查找并提供相匹配的bean作为依赖注入的目标对象。...,容器会根据构造函数参数类型找到符合条件的bean,并自动调用带有适当参数的构造函数来实例化SimpleMovieLister。

    55200

    CC++结构体完全攻略

    一旦结构体类型被声明并且其数据成员被标识,即可创建该类型的多个变量,就像可以为同一个类创建多个对象一样。...如果结构体包括任何诸如字符串之类的对象,那么在许多编译器上它都将无法运行。 在这些情况下,可以使用构造函数来初始化结构体成员变量,这和初始化类成员变量是相同的。...以下是一个名为 Employee 的结构体的声明语句,它包含一个具有两参数的构造函数,以便在创建一个 Employee 变量而不向其传递任何参数时,提供默认值: //非法结构体声明 struct Date...但是,类的数据成员通常是私有的,必须通过函数访问。因为结构数据成员是公共的,所以它们可以被直接访问,并且可以像常规变量一样使用。...可以改写程序 1 以允许 getItemData 函数创建 Invltem 结构体的局部实例,将数据值放入其成员变量中,然后将其传递回 main,而不是将其作为引用变量从 main 接收。

    1.1K10

    C++ Primer ---类(读书笔记)

    类的基本思想是 数据抽象 和 封装。数据抽象是一种依赖于 接口 和 实现 分离的编程艺术。类的接口包含 用户所能执行的操作;类的实现则包含 类的数据成员,负责接口实现的函数体,以及各种私有函数。...定义抽象数据类型 使用struct 或者class可以创建一个类,类里面包含成员变量,成员函数。...构造函数 类通过一个或几个特殊的成员函数来控制其对象的初始化过程,这些特殊的函数就是构造函数,构造函数的任务是初始化对象的数据成员,无论何时,只要类的对象被创建,就会执行构造函数。...如果类没有定义构造函数,编译器会创建一个 合成的默认构造函数。如果有自定义的构造函数,则不会创建默认的构造函数。 note:只有当类没有声明任何构造函数时,编译器才会自动的生成默认构造函数。...同样,也可以让其他类中的一个成员函数 来作为当前类的友元函数,也是使用friend修饰一下。

    56420

    漫谈建造者模式

    对象创建时赋值方式 1.1 构造器赋值 构造器赋值,适合参数少时,参数一多可能出现如下问题: 构造函数的参数列表会变得很长,代码在可读性和易用性上都会变差。...1.2 setter函数赋值 解决构造器赋值的最简单的方式就是用setter函数来给成员变量赋值,以替代冗长的构造函数。 对于必填项, 放到构造函数中设置,强制创建类对象的时候就要填写。...1.2.1 不足 使用setter时依旧可能存在不足之处: 对于必填项,如果必填的配置项有很多,把这些必填配置项都放到构造函数中设置,那构造函数就又会出现参数列表很长的问题。...,做集中的校验,校验通过之后才会创建对象 将真正对象的构造函数改为 private 私有权限,且不提供setter函数,就只能通过构造者来创建,创建出来的对象就是不可变对象了。...,可以使用构造函数一次性初始化好所有的成员变量。

    67320

    2023 跟我一起学设计模式:备忘录模式

    这个类中几乎没有任何方法, 但有许多与编辑器状态一一对应的成员变量。 为了让其他对象能保存或读取快照, 你很可能需要将快照的成员变量设为公有。 无论这些状态是否私有, 其都将暴露一切编辑器状态。...但负责人类将独立于原发器, 因为此时恢复方法被定义在了备忘录类中。 每个备忘录将与创建了自身的原发器连接。 原发器会将自己及状态传递给备忘录的构造函数。...由于这些类之间的紧密联系, 只要原发器定义了合适的设置器 (setter), 备忘录就能恢复其状态。...method createSnapshot():Snapshot is // 备忘录是不可变的对象;因此原发器会将自身状态作为参数传递给备忘 // 录的构造函数。...你可在该接口中添加一些元数据操作, 但不能暴露原发器的状态。 在原发器中添加一个创建备忘录的方法。 原发器必须通过备忘录构造函数的一个或多个实际参数来将自身状态传递给备忘录。

    25850

    C++ 类使用规范建议

    构造函数(Constructor)的职责 构造函数中只进行那些没有实际意义的(trivial,译者注:简单初始化对于程序执行没有实际的逻辑意义,因为成员变量的“有意义”的值大多不在构造函数中确定)初始化...(4)如果有人创建该类型的全局变量,构造函数将在main()之前被调用,有可能破坏构造函数中暗含的假设条件。例如,gflags尚未初始化。...使用继承的相关规范: (1)所有继承尽量使用public的,如果想私有继承的话,应该采取包含基类实例作为成员的方式作为替代。 (2)不要过多使用实现继承,组合通常更合适一些。...存取控制(Access Control) 将数据成员私有化,并提供相关存取函数,如定义变量foo_及取值函数foo()、赋值函数set_foo()。存取函数的定义一般内联在头文件中。 12....; (3)为避免隐式转换,需将单参数构造函数声明为explicit; (4)为避免拷贝构造函数、赋值操作的滥用和编译器自动生成,可声明其为private且无需实现; (5)仅在作为数据集合时使用struct

    2K20

    TypeScript 官方手册翻译计划【十二】:类

    TypeScript 不会分析在构造器中调用的方法以检测初始化语句,因为派生类可能会重写这些方法,导致初始化成员失败。...构造器 类的构造器和函数很像,你可以给它的参数添加类型注解,可以使用参数默认值或者是函数重载: class Point { x: number; y: number; // 使用了参数默认值的正常签名...这里需要注意的要点是,在派生类中,如果我们无意公开其成员,那么需要添加 protected 修饰符。...抽象方法或者抽象字段在类中没有对应的实现。这些成员必须存在于一个无法直接被实例化的抽象类中。 抽象类的角色是充当一个基类,让其子类去实现所有的抽象成员。...} 抽象构造签名 有时候你想要接受一个类构造器函数作为参数,让它产生某个类的实例,并且这个类是从某个抽象类派生过来的。

    3K10
    领券