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

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

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

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

C++定义结构体或作为关联容器

所以如果有查找数据需求,可以采用set或者map。 但是我们自定义结构体或者,无法对其比较大小,在放入到容器时候,就无法正常编译通过,这是set/map容器规范决定。...要将自定义结构体或者存入到set/map容器,就需要定义一个排序规则,使其可以比较大小。...最简单办法就是在结构体或者中加入一个重载小于号成员函数,这样在存数据进入set/map时,就可以根据其规则排序。 2....实例 在这里就写了一个简单例子,将自定义一个二维点存入set/map,并查找其中存入数据: #include #include #include #include...<< endl; } else { cout << "可以找到点" << endl; } } } 其中关键就是在点结构重载了

2K20

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

一、常量成员函数 1、const 修饰成员函数分析 在 C++ , 普通非静态成员函数 , 可以使用 const 进行修饰 , 在 下面的 Student , 定义了 void fun(int...* pThis, int age, int height) // 左数右指 , const 在 * 左边修饰是内存数据, const 在 * 右边修饰是指针本身 void fun(int...与 非静态普通成员变量 都不能修改 ; 不能调用非常量成员函数 : 只能调用 " 常量成员函数 " , 不能调用 非常量成员函数 , 保证不会修改 成员变量 ; " 常量成员函数 " 只能访问 常量成员变量...; // 身高 如果 成员函数 被 const 关键字 声明为 常量成员函数 , 则在该函数 不能修改 对象 任何成员变量 ; class Student { public: void fun...// 左数右指 , const 在 * 左边修饰是内存数据, const 在 * 右边修饰是指针本身 void fun(int age, int height) const {

18220

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

一、对象作为成员变量时构造函数问题 1、问题描述 如果 一个 A 对象 作为 另外一个 B 成员变量时 , 在以下场景会报错 : 为 A 定义 有参 构造函数 , 那么 A 无参默认构造函数就失效了...; 此时使用 默认无参构造函数 初始化 B , 就会报错 ; 在一个 , 其成员变量是 带有参构造函数 类型 , 这种情况下没有调用 有参构造函数机会 , 此时就会出现 编译报错情况 ; 在下面的代码... 无参构造函数创建 A 对象 , 但是 A 无参构造函数无法使用 , 必须使用 A 有参构造函数 , 这里就出现问题 , 报错 “B::B(void)”: 由于 数据成员“B::m_a”不具备相应...是一种用于初始化成员变量方法 ; 构造函数初始化列表 可实现功能 : 为成员变量提供初始值 调用其他 成员变量 构造函数 来初始化成员变量 构造函数初始化列表语法规则 : 构造函数() : 成员变量名称...初始化列表元素由 成员变量名称 和 初始值组成 , 使用等号 = 连接 ; 在下面的代码 , 为 B 定义了默认构造函数 , 其中定义构造函数 初始化列表 ; 在 初始化列表 , m_age

47730

C++同时存在继承以及组合时候,构造函数构造顺序

C++一大特点就是面向对象,面向对象主要就是一些相关特性(封装、继承、多态)。 那么在继承以及成员属性包含其他实例对象时候,构造函数构造顺序到底是怎么样子呢?...那么当一个对象既包含了继承关系同时也在自身成员属性包含了其他对象实例化时候,那么这时候实例化该类对象时候,构造函数顺序会是怎么样子呢?下面来看看这一段代码吧。...<< "C 构造函数" << endl; } private: B b; // C组合有B对象成员 int i_c; }; int main() { C...A,并且在C组合了B实例化对象,那么我们可以直接到以下结果,可以得知。...A 构造函数 B 构造函数 C 构造函数 构造顺序是首先构造继承,其次构造组合实例对象,最后才是构造自己本身。

1.1K20

结构体或定义对变长成员处理

对于一个结构体,头部信息固定,成员节点变长,可以采用下面的定义方式: 1....res_count;  char cgiinfo[0]; } stHeadInfo __attribute__((__aligned__(4))); typedef struct _stCgiInfo /*成员节点...sizeof(stCgiInfo)); stCgiInfo *CgiInfo = (stCgiInfo *)stHeadInfo->cgiinfo; 这样,通过下标就可以直接访问cginfo数组了,...2.stl 容器 当然,也可以统过使用STL容器,vector,定义stHeadInfo如下: typdef struct _stHeadInfo {  int version;  int magic_num...同时,在做为数据包在网络上传输时,可以在headinfo中加入len字段,有清晰边界,便于收发包。 前者缺点是:需要管理内存分配和释放。 后者优点是:使用简单,无需管理内存。

64010

c++数据成员初始化次序

分享一个之前学知识点,感觉还挺重要,就是当一个某个数据成员同时拥有就地初始化、构造函数初始化列表和构造函数函数体里赋值,那么它会先执行哪个?最后生效又是哪个呢?...根据老师讲解,数据成员初始化次序依次为: 就地初始化 > 构造函数初始化列表 >构造函数赋值(严格意义上不能成为初始化) 而当三种初始化方式都有时,构造函数体里赋值肯定执行,并且生效...,但是就地初始化和构造函数初始化列表执行情况是怎样呢?...所以当一个数据成员同时拥有就地初始化和初始化列表时,它会忽略就地初始化而执行构造函数初始化列表。...如果到代码有参构造函数函数体中加上 this->id = 20; ,运行结果会变为: 0 n = 1,id = 1 n = 1,id = 20 可以看到赋值把初始化列表给id初始化值覆盖掉了

80420

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

构造函数初始化列表 总结 : 初始化列表 可以 为 成员变量 提供初始值 ; 初始化列表 可以 调用 成员变量 类型 构造函数 进行成员变量初始化操作 ; 初始化列表 可以 使用 构造函数...传入 参数 ; 初始化时 , 根据定义顺序 , 先调用 成员变量 构造函数 , 然后调用外部类构造函数 , 析构函数正好相反 ; 实例对象 const 成员变量 必须只能在 初始化列表 中进行...初始化 , 所有的构造函数都要进行初始化操作 ; 一、构造函数 初始化列表 为 const 成员变量初始化 1、初始化 const 常量成员 如果 定义了 被 const 修饰 成员变量...进行赋值 , 因此 这里 必须在 构造函数 初始化列表 对 const 成员变量 进行赋值 ; 2、错误代码示例 - 没有初始化常量成员 在下面的 B , 定义了常量 const int...; // 常量成员 }; int main() { // 通过 B 有参构造函数 // 其中 构造函数参数 作为 参数列表 参数值 B b(10, 10, 150); // 控制台暂停

17630

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

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

17620

最全面的c++构造函数高级使用方法及禁忌

说明一下,我用是gcc7.1.0编译器,标准库源代码也是这个版本。 本篇文章讲解c++构造函数高级用法以及特殊使用情况。 1....,再执行子类构造函数,那这里再思考一下上面第二点,如果构造函数可以为虚函数,那根据多态规则,父构造函数将不会被执行,这也是不成立。...实际上,我们这里首先应该思考一下初始化列表和赋值有什么区别,初始化列表其实相当于调用一次构造函数,而赋值呢,是首先调用一次构造函数,然后再调用赋值函数,相当于先声明,然后又定义一次,但我们初次接触c++...,而当子类没有实现时候才调用父函数,这一幕是不是很熟悉,实际上就是发生了多态效果,通过gdb跟踪CSon构造函数,输出当前对象数据,如下: (gdb) p *this $2 = (CSon...综上,不论是基还是继承,他们构造函数中都可以直接调用虚函数

1.6K30

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

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

6K40

ASP.NET AJAX(6)__Microsoft AJAX Library面向对象类型系统命名空间——构造函数——定义方法——定义属性——注册——抽象——继承——调用父

可重复注册命名空间,每个独立脚本模块前都要注册命名空间保证命名空间存在 定义构造函数 定义成员(方法、属性、事件) 注册 ——构造函数 构造函数即为function定义 通常用于初始化域变量..._mymethod=function{throw Error.notImplemented();}}//包含抽象方法 ——继承 调用父构造函数 有父必须调用父构造函数,否则会丢失继承效果...可以直接普通方式实现父抽象成员 toString方法无法被继承 ——调用父方法 MyNamespace.MyClass.prototype={myMethod:function(param1,...Employee三个 接口 与定义方法大致相同 构造函数抛出异常 所有的方法抛出异常(只有方法签名,不提供实现) 注册接口时使用registerInterface方法 接口无法继承其他接口 接口定义.../如果当前 Type 在 object 表示对象继承层次结构,或者如果当前 Type 是 object 支持接口,则为 true Type.isClass Type.isInterface Type.isNamespace

6.2K50

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

一、在不同内存创建实例对象 1、栈内存创建实例对象 在上一篇博客 【C++构造函数分类 ① ( 构造函数分类简介 | 无参构造函数 | 有参构造函数 | 拷贝构造函数 | 代码示例 - 三种类型构造函数定义与调用...) , 介绍了 三种类型 构造函数 , 并在 main 函数 分别 调用了这 3 种构造函数 ; 下面的调用方式 , 调用一个构造函数 , 创建 Student 实例对象 , 最终将实例对象赋值给了..., 会自动将栈内存实例对象销毁 ; 栈内存 调用 构造函数 创建 实例对象 , 不需要关注其内存占用 ; 2、堆内存创建实例对象 在 栈内存 声明 实例对象 方式是 : 该 s1...; Student* s2; 在 C++ 语言中 , 可以使用 new 关键字 , 调用有参构造函数 , 创建 实例对象 ; 在下面的 C++ 代码 , 声明并定义了 MyClass , 该类定义了一个有参构造函数..., 接受两个整数作为 构造函数参数 ; 在 main 函数 , 使用 使用 new 关键字 来调用 有参构造函数 创建 MyClass 实例对象 ; class MyClass { public

15120

如何把CPP源程序改写成C语言?

方法有两种: 第一种是将C++面向对象特征去掉,先全部理解源代码逻辑,然后改写;第二种是在C中保留面向对象部分特征,用结构体实现功能。...倒不是说一无所知对大家有好处,只是想说这种方法与程序逻辑本身无关性。 下面对C++一些特性,以及如何在c里实现或者替代,作一些初步探讨: 说明: 函数Ixx为xx构造函数实现。...1)对于数据成员可以直接转为C结构数据成员。 2)函数则需转化为对应函数指针,因为struct里不允许出现函数声明和定义。...在成员函数里,实际上在参数列里也隐含有一个指向自身this指针。 3)对于静态成员则要定义成全局变量或全局函数,因为结构不能有静态成员。...四.拷贝构造函数 拷贝构造函数主要用途是加快以下情况下构建速度: 1. 作为参数传给函数。(additem(Itema)) 2. 作为函数返回值。 3.

2.1K20

C++】多态 ⑬ ( 多继承应用 “ 抽象 “ | 接口和抽象 | C++ 语言中接口实现 | 只定义 纯虚函数 抽象作接口 | )

语言中接口实现 C++ 语言中 , 没有接口概念 , 这里使用 " 纯虚函数 " 实现接口 ; 接口特点 : 接口 只有 函数原型 , 没有成员变量 , 函数原型 指的是 函数只有 返回值 函数名...和 参数列表 , 没有函数体 ; C++ 接口 有如下要求 : 只能定义纯虚函数 , 该类是一个抽象 ; 不能定义除纯虚函数之外其它成员 , 普通函数 , 成员变量 ; 下面的就是...virtual void pureVirtualFunction() = 0; }; 二、代码示例 - 多继承应用 " 抽象 " 在 C++ , 使用只定义了 纯虚函数 抽象 ,...作为接口 ; 借助 C++ 多继承特性 , 继承多个 " 只定义了 纯虚函数 抽象 " , 也就是接口 ; 代码示例 : #include "iostream" using namespace...std; // 定义了纯虚函数就是抽象 // 这里使用抽象作为接口使用 class Interface1 { public: // 纯虚函数 virtual int add(int a

17020

Google C++编程风格指南(四)之类相关规范

定义,将关键字explicit加到单参数构造函数前:explicit Foo(string name); 例外:在少数情况下,拷贝构造函数可以不声明为explicit;特意作为其他透明包装器...(4)限定仅在子类访问成员函数为protected,需要注意数据成员应始终为私有。 (5)当重定义派生函数时,在派生明确声明其为virtual。...存取控制(Access Control) 将数据成员私有化,并提供相关存取函数定义变量foo_及取值函数foo()、赋值函数set_foo()。 存取函数定义一般内联在头文件。 12....成员函数数据成员(变量)前,也就是“行为为中心”进行设计。...主张“行为为中心”的人将关注重点放在了服务和接口上,习惯将public类型函数写在前面,而将private类型数据写在后面[4]^{[4]},所以很多大公司Google推荐成员声明次序如下

83021

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

引入是面向对象编程一个核心概念。通过,我们可以创建具有相同属性和行为对象,从而实现代码重用和模块化。定义了对象结构和行为,包括对象属性(数据成员)和方法(成员函数)。...比如:之前在我之前用C语言写数据结构文章,用C语言方式实现栈,结构只能定义变量;现在C++方式实现,会发现struct也可以定义函数。...总结:c++兼容C语言中struct用法,但是c++将struct升级成了 C++名代表什么 在C++名代表了一种自定义数据类型。...是一种用户定义数据类型,可以封装数据成员函数实现特定功能。 定义了一组数据成员成员函数,用于描述对象状态和行为。数据成员表示对象属性和状态,而成员函数用于定义对象行为和操作。...通过创建对象,我们可以实例化该类并使用成员函数来操作对象数据提供了一种封装数据和功能机制,使得代码可以更加模块化和可维护。 名在C++是用来标识该类唯一标识符。

11710
领券