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

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

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

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

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

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

49730

从零开始学C++之继承(二):继承与构造函数、派生转换

一、不能自动继承成员函数 构造函数(包括拷贝构造函数) 析构函数 =运算符 二、继承与构造函数 构造函数不被继承,派生中需要声明自己构造函数。...声明构造函数时,只需要对本类中新增成员进行初始化,对继承来成员初始化调用构造函数完成(如果没有给出则默认调用默认构造函数)。...派生构造函数需要给构造函数传递参数 #include  using namespace std; class ObjectB { public:     ObjectB...从输出可以看出: 派生对象构造次序: 先调用对象成员构造函数,接着是构造函数,然后是派生对象成员构造函数,最后是派生自身构造函数。...初始化列表参数多个且其中有调用构造函数时,先执行构造函数(从最远开始,如果多重继承则按继承顺序);其他对象成员若不止一个,则按定义顺序构造,与初始化列表顺序无关。

1.5K00

C++面试题

对于多重继承派生来说,它含有与父数量相对应函数指针。 2. 为什么构造函数不能定义为虚函数?...构造函数不需要是虚函数,也不允许是虚函数,因为创建一个对象时我们总是要明确指定对象类型,尽管我们可能通过实验室指针或引用去访问它但析构却不一定,我们往往通过指针来销毁对象。...当编译器为这个构造函数产生代码时,它是为这个构造函数产生代码——既不是为,也不是为它派生(因为不知道谁继承它)。所以它使用VPTR必须是对于这个VTABLE。...VPTR状态是由被最后调用构造函数确定。这就是为什么构造函数调用是从到更加派生顺序另一个理由。...而子类析构函数具有析构掉职责,所以不会造成内存泄漏。而并不知道自己子类。 4. 构造函数和析构函数能抛出异常吗? 不能。 5. 多继承存在什么问题?如何消除多继承中二义性?

1.7K42

C++虚调用及其调用具体形式

函数体内,a是一个“纯粹”A对象,与类型B毫无关系,所以a.show()是调用。 2.2构造函数和析构函数中调用虚函数构造函数和析构函数中调用虚函数,对虚函数调用实际航是调用。...这是虚函数被“调用”另一个例子。由于从概念上说,在一个对象构造函数运行完毕之前,这个对象还没有完全诞生,所以在构造函数中调用虚函数,实际上都是调用。...析构时,在销毁一个对象时,先调用该类所属析构函数,然后再调用其析构函数。所以,在调用析构函数时,派生已经被析构了,派生数据成员已经失效,无法动态调用派生函数。...: in A in A after new in A after delete in A 在构造B对象时,会先调用A构造函数,如果在构造函数中对show()调用是虚调用,那么应该打印出“in...3.虚调用常见形式 设立虚函数初衷就是想在设计时候,对该派生实施一定程度控制。笼统说,就是“通过访问派生成员”。

47030

虚调用及其调用具体形式

函数体内,a是一个“纯粹”A对象,与类型B毫无关系,所以a.show()是调用。 2.2构造函数和析构函数中调用虚函数构造函数和析构函数中调用虚函数,对虚函数调用实际航是调用。...这是虚函数被“调用”另一个例子。由于从概念上说,在一个对象构造函数运行完毕之前,这个对象还没有完全诞生,所以在构造函数中调用虚函数,实际上都是调用。...析构时,在销毁一个对象时,先调用该类所属析构函数,然后再调用其析构函数。所以,在调用析构函数时,派生已经被析构了,派生数据成员已经失效,无法动态调用派生函数。...: in A in A after new in A after delete in A 在构造B对象b时,会先调用A构造函数,如果在构造函数中对show()调用是虚调用...3.虚调用常见形式 设立虚函数初衷就是想在设计时候,对该派生实施一定程度控制。笼统说,就是“通过访问派生成员”。

38810

派生始化、初始化顺序

1、先始化父成员,调用父构造函数,有多个从左向右按声明顺序始化。 2、内嵌对象始化,内嵌对像构造器。如果父或是内嵌对象,有无参构造器的话,可以不用显示调用。...3、派生构造器。 构造调用过程是,->成员->子类,而且析构器我们基本上不用去管理,因为析构器没有参数,而析构器调用过程是,子类->成员->。...std; class A { public: A(int iA){} }; class B : public A { public: B(int iA, int iB) :A(iA){}// 子类要给父有参构造函数传参初始化...}; class C : public B { public: C(int iC, int iB, int iA) :B(iA, iB){} // 子类要给父有参构造函数传参初始化 }; int main

14830

C++ 引用计数技术简介(23)

文章目录 1.一个引用计数 2.基于引用计数 String 3.自动操作引用次数 4.最终 String 参考文献 1.一个引用计数 Reference-counting 可用于字符串以外场合...但是如果重写class以便适用reference counting可能需要大量工作。 我们可以设计一个引用计数 RCObject,供想拥有引用计数继承。...RCObject 定义如下: // 引用计数 class RCObject{ public: RCObject();//构造函数 RCObject(const RCObject...例如在自定义 String 中,值 StringValue 并不不会被赋值,而是 String 对象赋值。...2.基于引用计数 String 基于引用计数 String 设计如下: class String { private: Struct StringValue:public RCObject

55010

C#基础知识系列七(base、this、new、override、abstract、virtual、static)

构造函数之间执行问题。...base关键字 base 关键字用于在派生中实现对公有或者受保护成员访问,但是只局限在构造函数、实例方法和实例属性访问器中: 调用上已被其他方法重写方法。...{ base.Say(); Console.WriteLine("Son Say"); } } 指定创建派生实例时应调用构造函数...static字段和static构造函数 主要来说明执行顺序:   1、编译器在编译时候,先分析所需要静态字段,如果这些静态字段所在有静态构造函数,那么就会忽略字段初始化;如果没有静态构造函数...3、而带有静态构造函数静态字段,只有在引用到时候才进行初始化。

62420

C++ 构造函数与析构函数调用虚函数注意事项

虽然可以对虚函数进行调用,但程序员编写虚函数本意应该是实现动态联编。在构造函数中调用虚函数函数入口地址是在编译时静态确定,并未实现虚调用。...当创建某个派生对象时,如果在它构造函数中调用虚函数,那么此时派生构造函数并未执行,所调用函数可能操作还没有被初始化成员,将导致灾难发生。...所以,一个构造函数在执行时,并不能保证该函数所能访问到虚指针就是当前被构造对象最后所拥有的虚指针,因为后面派生构造函数会对当前被构造对象虚指针进行重写,因此无法完成动态联编。...从概念上说,析构函数是用来销毁一个对象,在销毁一个对象时,先调用该对象所属析构函数,然后再调用其析构函数,所以,在调用析构函数时,派生对象“善后”工作已经完成了,这个时候再调用在派生中定义函数版本已经没有意义了...因此,一般情况下,应该避免在构造函数和析构函数中调用虚函数,如果一定要这样做,程序猿必须清楚,对虚函数调用其实是调用。

91610

C++不要在构造函数和析构函数中调用虚函数

虽然可以对虚函数进行调用,但程序员编写虚函数本意应该是实现动态联编。在构造函数中调用虚函数函数入口地址是在编译时静态确定,并未实现虚调用。...当创建某个派生对象时,如果在它构造函数中调用虚函数,那么此时派生构造函数并未执行,所调用函数可能操作还没有被初始化成员,浙江导致灾难发生。...所以,一个构造函数在执行时,并不能保证该函数所能访问到虚指针就是当前被构造对象最后所拥有的虚指针,因为后面派生构造函数会对当前被构造对象虚指针进行重写,因此无法完成动态联编。...从概念上说,析构函数是用来销毁一个对象,在销毁一个对象时,先调用该对象所属析构函数,然后再调用其析构函数,所以,在调用析构函数时,派生对象“善后”工作已经完成了,这个时候再调用在派生中定义函数版本已经没有意义了...因此,一般情况下,应该避免在构造函数和析构函数中调用虚函数,如果一定要这样做,程序猿必须清楚,这是对虚函数调用其实是调用。

2.8K30

C++常见面试题

声明复数Complex,该类中有两个私有变量 real 和 imag,分别表示一个复数中部和虚部,请添加一个友元函数add实现 复数加法。...定义一个图(figure),其中有保护数据成员:高度(height)和宽度(width), 一个公有的构造函数。由该图形建立两个派生:矩形和等腰三角形。...: double area(); triangle(double = 0, double = 0); }; // 体外定义构造函数并初始化 triangle ::...public figure { public: double area(); rectangle(double = 0, double = 0); }; // 体外定义构造函数并初始化...用虚函数分别计算几种图形面积、并求它们和。要求用指针数组,使它每一个元素指向一个派生对象。

53110

C++引用计数(reference counting)技术简介(2)

1.一个引用计数(Reference-Counting) Reference-counting可用于字符串以外场合,任何class如果其不同对象可能拥有相同值,都适用此技术。...但是如果重写class以便适用reference counting可能需要大量工作。 我们可以设计一个引用计数RCObject,供想拥有引用计数继承。...RCObject定义如下: //引用计数 class RCObject{ public: RCObject();//构造函数 RCObject(const RCObject...例如在自定义String中,值StringValue并不不会被赋值,而是String对象赋值。...2.基于引用计数String 基于引用计数String设计如下: class String{ private: Struct StringValue:public RCObject{

73520

C#反射机制

地球内部结构:地球内部结构大体可以分为三层:地壳、地幔和地核。如何在地球表面不用深入地球内部就知道其内部构造呢?我们可以向地球发射“地震波”,“地震波”分两种一种是“横波”,另一种是“纵波”。...但它是一个抽象,Type有与每种数据类型对应派生,我们使用这个派生对象方法、字段、属性来查找有关该类型所有信息。...(2)查看构造方法 我们可以根据对象进而查看内部构造函数以及参数。...(3)用构造函数动态生成对象 我们使用构造函数动态创建一个新对象,如下代码所示: (4) 用Activator生成对象 上面代码中,Activator.CreateInstance第一个参数为需要创建对象类型...,后面的为调用构造函数参数,上面的三种格式都可以,只是调用构造函数不同而已。

14830

C#基础知识之base、this、new、override、abstract梳理

一、Base关键词几种用法 base重要用于OOP多态上,base 关键字用于在派生中实现对公有或者受保护成员访问,但是只局限在构造函数、实例方法和实例属性访问器中 1、base调用构造函数...// 所以this.name对应是"qxh" // name对应是GetName方法内局部变量 Console.WriteLine...(); } 2、new 修饰符:new 关键字可以显式隐藏从继承成员 new 关键字可以显式隐藏从继承成员。...{ new public string Name { get; set; } = "dachong"; } 3、new 约束:用于在泛型声明中约束可能用作类型参数参数类型 new 约束指定泛型声明中任何类型参数都必须有公共无参数构造函数...相应没有用virtual修饰方法,我们叫它方法。

41820

常见c和cpp面试题目汇总(一)

一、C和C++区别: 1、C是面向过程语言,是一个结构化语言,考虑如何通过一个过程对输入进行处理得到输出;C++是面向对象语言,主要特征是“封装、继承和多态”。...关键字可有可无 override,派生覆盖函数,实现接口重用;特征:不同范围(和派生)、函数名字相同、参数相同、中必须有virtual关键字(必须是虚函数) overwrite,派生屏蔽了其同名函数...九、虚函数是怎么实现: 每一个含有虚函数都至少有有一个与之对应函数表,其中存放着该类所有虚函数对应函数指针(地址);示例对象不包含虚函数表,只有虚指针;派生会生成一个兼容函数表...,还没有内存空间,更没有虚函数表地址用来调用虚函数构造函数了 2、析构函数最好声明为虚函数 首先析构函数可以为虚函数,当析构一个指向派生指针时,最好将析构函数声明为虚函数,否则可以存在内存泄露问题...如果析构函数不被声明成虚函数,则编译器实施静态绑定,在删除指向派生指针时,只会调用析构函数而不调用派生析构函数,这样就会造成派生对象析构不完全。

1.2K31

C++基础(七).多态(1)

函数必须是非静态成员函数(且非构造函数),其访问权限是public 虚函数作用是实现动态联编,也就是在程序运行阶段动态地选择合适成员函数,在定义了虚函数后,可以在派生中对虚函数进行重新定义...通常我们把很多函数加上virtual,是一个好习惯,虽然牺牲了一些性能,但是增加了面向对象多态性,因为你很难预料到父里面的这个函数不在子类里面不去修改它实现 3)虚函数用于“作继承”,继承接口同时也继承了父实现...抽象是不能定义对象,在实际中为了强调一个是抽象,可将该类构造函数说明为保护访问控制权限 抽象主要作用是将有关组织在一个继承层次结构中,由它来为它们提供一个公共根,相关子类是从这个根派生出来...抽象可以有构造方法,接口中不能有构造方法 抽象中可以有普通成员变量,接口中没有普通成员变量 接口里边全部方法都必须是abstract,抽象可以有实现了方法 抽象抽象方法访问类型可以是...,抽象静态成员变量访问类型可以任意,但接口中定义变量只能是 public static final 类型,并且默认即为 public static final 类型 ---- 虚是一个相对概念

46820
领券