初始化列表

C++: 变量和基本类型要点小结

时光怂恿深爱的人放手 提交于 2020-03-08 12:58:26
文章目录 列表初始化 声明与定义 名字的作用域 引用 空指针 auto类型说明符 decltype类型说明符 列表初始化 int a = 0 ; int a = { 0 } ; int a ( 0 ) ; int a { 0 } ; 形如 a{} 的成为列表初始化,当使用{}且存在丢失信息风险的时候,编译器会报错,例如 long double d = 3.1415926 ; int e { d } ; // 报错 int f ( d ) ; // 不报错 声明与定义 变量声明规定了变量的类型和名字,定义在此基础上还申请存储空间 变量只能被定义一次,但是可以被多次声明 extern int i ; //声明而非定义i int j ; //声明且定义j 名字的作用域 函数体之外定义:全局作用域 函数体之内定义:块作用域 允许在内层定义域 重新定义 外层已有的名字 引用 引用并非对象,他只是已有对象的别名 空指针 - C: NULL C++: nullptr auto类型说明符 不知道具体类型,可以通过初始值推断,因此 auto 定义的变量必须有初始值 decltype类型说明符 选择并返回操作数的数据类型,例如 int a = 10 ; decltype ( a ) b = 4 ; // b是int类型 来源: CSDN 作者: AmarisEx 链接: https://blog

《C++ Primer(第五版)》第六章笔记

旧城冷巷雨未停 提交于 2020-03-06 08:53:59
6.1 函数基础   通过 调用运算符 来执行函数。函数的调用完成两项工作:用实参初始化函数的形参;将控制权转移给被调用函数。   当遇到一条 return 语句时函数结束执行过程。return 也完成两项工作:返回 return 语句中的值;将控制权从被调用函数转移回主调函数。 形参和实参   形参出现在函数定义的地方,实参出现在函数调用的地方。实参是形参的初始值,实参的类型必须与对应的形参类型相匹配。   任意两个形参都不能同名,而且函数最外层作用域中的局部变量也不能使用与函数形参一样的名字(外层局部变量被内部形参隐藏)。 6.1.1 局部对象   对象的 生命周期 是程序执行过程中该对象存在的一段时间。   形参和函数体内部定义的变量统称为 局部变量 。局部变量会 隐藏 在外层作用域中同名的其他所有声明中。   只存在于块执行期间的对象称为 自动对象 。    局部静态对象 在程序的执行路径第一次经过对象定义语句时初始化,并且直到程序终止才被销毁。内置类型的未初始化局部变量产生未定义的值,内置类型的局部静态变量初始化(值初始化)为 0。 6.2 参数传递   形参的类型决定了形参和实参交互的方式。当形参是引用类型时,其对应的实参被 引用传递 或函数被 传引用调用 ;当实参的值被拷贝给形参时,实参被 值传递 或函数被 传值调用 。 6.2.1 传值参数  

JavaSE!面向对象!!!!

情到浓时终转凉″ 提交于 2020-03-06 03:21:27
1. 面向对象的编程思想: 面向对象的编程思想就是把一个事物看成一个整体,把这个事物中的属性(特征)和功能(方法)表述出来。 面向对象的编程思想更贴近于人的正常思维方式。 面向对象的编程思想来源于生活服务于生活。 面向对象的编程思想中,一定会用到面向过程(以流程为基本单位,注重最后结果。)的编程思想。有缺陷:功之间有很强的关联。不利于程序的维护和扩展。 面向对象的特征: 抽象!! 封装!! 继承!! 多态!! 。 2. 对象 在现实生活中,具体存在的一个事物。 在java编程中,万事万物皆对象。 特点: 在java编程中,无论两个事物多么相近或是相似,他们永远都是两个不同的对象。 各种法律、规则制度也是一种对象。 对象的内存图解 1 1.在堆内存中开辟一个空间并分配地址 2.按照类的描述,在该空间中定义成员变量 并且有默认初始化值 3.加载成员函数进入方法区(只加载一次) 4.对象创建完毕 将空间地址赋值给相应的变量 5.变量(p1/p2)调用成员变量 先通过该变量所存储的地址去堆空间中找 然后在该空间中找相应的成员变量 6.变量(p1/p2)调用成员函数 直接去方法区中找该成员函数 将该函数加载进栈内存开始运行 为了方便区分哪个对象调用的该成员函数 由this这个关键字段 来区分 this主要存的是当前对象的地址 注意:当成员函数在操作变量的时候 先在当前函数的空间里找 局部变量

5.4 final修饰符

北城余情 提交于 2020-03-04 12:44:32
目录 简介 一、final成员变量(类变量、实例变量) 二、final局部变量 三、final修饰基本类型变量和引用类型变量的区别 四、可执行“宏替换”的final变量 五、final方法 六、final类 七、不可变(immutable)类 八、缓存实例的不可变类 简介 final关键字可以用于 修饰类、方法、变量 ,用于表示它修饰的类、变量、方法不可以改变。 final修饰变量时,表示该变量一旦获得初始值就不可以被改变,final既可以修饰成员变量(包括类变量和实例变量),也可以修饰局部变量、形参。 由于final变量获取初始值后不能被重新赋值,因此final修饰成员变量和局部变量有一定不同。 一、final成员变量(类变量、实例变量)   成员变量时随着类初始化或对象初始化而初始化的。当类初始化时,系统会为之分配内存空间,并分配初始值;当创建对象时,系统会为该实例变量分配内存,并分配默认值。因此当执行类初始化块时,可以对类变量赋值;当执行普通初始化块、构造器时可对是变量赋初始值。 因此成员变量可在定义该变量时指定默认值,也可以在初始化块、构造器中指定初始值。 final修饰的成员变量必须由程序员显示地指定初始值 ★类变量:必须在静态初始化块中指定初始化值或声明该类变量时指定初始值,而且只能在这两个地方的其中1之一。 ★实例变量:必须在非静态初始化块

C++ Primer 学习笔记 第七章 类

依然范特西╮ 提交于 2020-03-03 05:59:05
类的基本思想是数据抽象和封装。数据抽象是一种依赖于接口和实现分离的编程技术,类的接口包括用户所能执行的操作,类的实现则包括类的数据成员、负责接口实现的函数体以及定义类所需的各种私有函数。封装实现了类的接口和实现的分离,封装后的类隐藏了它的实现细节,即类的用户只能使用接口而不能访问实现部分。 类要想实现数据抽象和封装,首先需要定义一个抽象数据类型,在抽象数据类型中,由类的设计者负责考虑类的实现过程,而使用该类的程序员只需要抽象地思考类型做了什么,而无须了解类型的工作细节。 我们可以通过抽象数据类型提供的接口来完成某些操作,但如果一个类没有任何接口供用户使用,只有一些数据成员,那这个类就不是抽象数据类型,一旦定义了一些成员函数供类的用户使用,它就变成了了抽象数据类型。 定义和声明成员函数的方式与普通函数差不多,成员函数的声明必须在类的内部,但它的定义既可以在类的内部,也可以在类的外部。定义在类内部的函数是隐式的inline函数。 Sales_data类: struct Sales_data { string isbn ( ) const { return bookNo ; } Sales_data & combine ( const Sales_data & ) ; double avg_price ( ) const ; string bookNo ; unsigned units

C++程序设计(面向对象进阶)崔毅东 ——第3单元第02节——2List Initialization(列表初始化)

我的梦境 提交于 2020-02-29 21:28:00
List Initialization(列表初始化) 1. Before C++11 (C++11标准之前的初始化方法) int x = 0 ; int y ( 2 ) ; char c ( 'a' ) ; int arr [ ] = { 1 , 2 , 3 } ; char s [ ] = "Hello" ; C++11 also support the old ways (C++11标准仍然支持旧的初始化方法) 2. List Initialization (列表初始化) 2.1. List initialization is a new feature for C++11 (列表初始化是C++11的一个新特性) 2.2. List: braced-init-list (“列表”是用花括号括起来的一(些)值) 2.3. 列表初始化的两个分类 Direct list initialization (直接列表初始化) Copy list initialization (拷贝列表初始化) //直接列表初始化) /* Variable initialization */ int x { } ; // x is 0; int y { 1 } ; // y is 1; /* Array initialization */ int array1 [ ] { 1 , 2 , 3 } ;

14--swift之派生类构造方法

拟墨画扇 提交于 2020-02-29 02:33:24
1. 指定构造和便利构造方法解析 这些是类类型的概念,在值类型里没有 class Ab { var a: Int var b: Int // 以 init 开头就是指定构造 init(a: Int,b: Int){ self.a = a self.b = b// 注意:类的指定构造方法里不能像值类型那样调用其他构造器 print("Class ab init") } // 类似值类型的构造方法,加上关键字 convenience ,搭配 self.init 就是便利构造方法,他通过调用其他的构造方法来实现初始化,当然既可以通过指定构造方法也可以是其他便利构造方法 convenience init(a: Int){ // self.a = a // b = 0 self.init(a: a,b: 0) } } 2. 派生类的构造方法 class Ab { var a: Int var b: Int // 以 init 开头就是指定构造 init(a: Int,b: Int){ self.a = a self.b = b// 注意:类的指定构造方法里不能像值类型那样调用其他构造器 print("Class ab init") } // 类似值类型的构造方法,加上关键字 convenience ,搭配 self.init 就是便利构造方法,他通过调用其他的构造方法来实现初始化

C++(十三)对象数组与构造函数

白昼怎懂夜的黑 提交于 2020-02-28 01:00:52
一、一般对象数组初始化 对象数组中的元素同样需要用构造函数初始化。具体哪些元素用哪些构造函数初始化,取决于定义数组时的写法。 # include <iostream> using namespace std ; class CSample { public : CSample ( ) { //构造函数 1 cout << "Constructor 1 Called" << endl ; } CSample ( int n ) { //构造函数 2 cout << "Constructor 2 Called" << endl ; } } int main ( ) { CSample arrayl [ 2 ] ; // array1 数组中的两个元素没有初始化,调用无参构造函数初始化, cout << "stepl" << endl ; CSample array2 [ 2 ] = { 3 } ; //array2 数组中array3[0]初始化了,array3[1] 无初始化,故分别用构造函数 2 和构造函数 1 进行初始化。 cout << "step2" << endl ; CSample * array3 = new CSample [ 2 ] ; //动态分配了一个 CSample 数组,这两个元素无参,都用无参构造函数初始化 delete [ ] array3 ;

C++变量和基本类型知识概要总结

烂漫一生 提交于 2020-02-26 15:38:40
整合基本的关于c++的变量和基本类型的知识。参考于C++primer第二章 仅包含部分,而非全部 inti=b; //i的值为1 i= 3.14; //i的值为3 double pi = i; // pi的值为3.0 unsigned char C = - 1; //假设char占8比特,c的值为255 signed char c2 = 256; //假设char占8比特,c2的值是未定义的 注意:当我们赋给无符号类型一个超过它表示范围的值时,结果就是初始值对无符号类型所表示的数值总值取模后的余数。 举个清新易懂的例子 例如:八比特大小的unsigned char 可以表示0至255区间内的值,如果赋了一个区间以外的值,则实际值就是该值对256取模后所得的余数。-1赋值给unsigned char的结果时255. 但是 !!赋值给有符号类型超过它表示范围的值时,结果就是未定义的。程序可能继续工作,可能崩溃,也可能产生垃圾数据。 int类型的加了一个无符号值时,int会先变成无符号类型然后再操作。 若两个无符号相减后变成负数了,结果会是取模后的值 ‘A’ 和 "A"是有区别的,'A’就是一个单独的字符A,而"A"则代表了一个字符的数组,包含两个字符,一个是字母A ,另一个是空字符。 对于C++程序员来说,变量和对象一般可以互换使用 初始化不是赋值

python函数默认参数为可变对象的理解

坚强是说给别人听的谎言 提交于 2020-02-25 01:10:02
python函数默认参数为可变对象的理解 1.代码在执行的过程中,遇到函数定义,初始化函数生成存储函数名,默认参数初识值,函数地址的函数对象。 2.代码执行不在初始化函数,而是直接执行函数体。 代码实例 这要从函数的特性说起,在 Python 中,函数是第一类对象(function is the first class object),换而言之,函数也是对象,跟整数、字符串一样可以赋值给变量、当做参数传递、还可以作为返回值。函数也有自己的属性,比如函数的名字、函数的默认参数列表。 # 函数的名字 >>> func.__name__   'func'   # 函数的默认参数列表 >>> func.__defaults__   ([ 1, 1, 1, 1, 1], 1) def是一条可执行语句,Python 解释器执行 def 语句时,就会在内存中就创建了一个函数对象(此时,函数里面的代码逻辑并不会执行,因为还没调用嘛),在全局命名空间,有一个函数名(变量叫 func)会指向该函数对象,记住,至始至终,不管该函数调用多少次,函数对象只有一个,就是function object,不会因为调用多次而出现多个函数对象。 函数对象生成之后,它的属性:名字和默认参数列表都将初始化完成。 初始化完成时,属性 __default__ 中的第一个默认参数 numbers 指向一个空列表。