初始化列表

有继承情况下的初始化

眉间皱痕 提交于 2019-12-06 15:33:28
类初始化 类初始化是执行<clinit>()方法,它的代码由两部分组成: (1)静态变量的显式赋值 (2)静态代码块 它俩是按照编写的顺序组装而成 每一个类的类初始化方法只会执行一次 子类初始化时会先检查父类,如果父类还没有初始化,会先完成父类的初始化,即先执行父类的<clinit>()方法 实例初始化 一个类可能会有1~n个的<init>方法,有几个看声明了几个构造器 实例初始化是执行对应的<init>方法,具体执行哪个,看new后面调用的是哪个构造器 实例初始化由一下四个部分组成: ①super()或super(实参列表)==>调用父类的对应的实例初始化方法,说明创建子类对象时,也会导致父类的实例初始化方法执行的 其中super()或super(实参列表)是原先写在构造器首行的 ②实例变量的显式赋值 ③非静态代码块 ④构造器中的代码 其中②和③是按代码中编写的顺序组装,①和④是一头一尾 实例初始化,每次new对象时执行,new一个执行一个 类初始化和实例初始化 如果第一次使用某个类时就是在创建对象,那么要先完成类初始化,然后再执行实例初始化 来源: https://www.cnblogs.com/daidai66/p/11992967.html

C++ 第2章 变量、基本数据类型

老子叫甜甜 提交于 2019-12-06 10:58:31
/* 基本内置类型: 算术类型 空类型 位 / 比特( bit ): 0/1 字节 byte : 8 个二进制位(计算机存储信息的基本单位)即 8 比特 / 位 字 word : 若干个字节组成一个字(可以存放一条计算机指令或数据) 字长 word size : CPU 中每个字包含的二进制的长度(即位数) 位 / 比特 bit: 0/1 --> 字节 byte ( 8 比特 :00000000 ) --> 字 (若干字节) 算术类型: 整型( 包含字符和布尔类型在内)和 浮点型 C++ 算术类型: 类型 含义 最小尺寸 main 返回 0 表示成功 Bool 布尔类型 未定义 真转换成 1 假转换成 0 Char 字符 8 位 即 8 个二进制位 一个字节 Wchar_t 宽字符 16 位 Char16_t Unnicode 字符 16 位 Char32_t Unicode 字符 32 位 Short 短整型 16 Int 整型 16 Long 长整型 32 Long long 长整型 64 Float (6 位有效数) 单精度浮点数 6 位有效数字 Double 双精度浮点数 10 位有效数 Long double 扩展精度浮点数 10 基本的字符类型是 char 一个 char 的空间应该确保可以存放机器基本字符集中任意字符对应的数字值。也就是说, 一个 char

存储持续性、作用域和链接性

荒凉一梦 提交于 2019-12-06 08:50:31
存储持续性、作用域和链接性 c++中使用3中不同的方案存储数据 c++11中使用4中不同的方案存储数据。 这些方案的区别在于数据保留在内存中的时间。 自动存储持续性 在函数定义中声明的变量的存储持续性为自动的。2种 静态存储持续性 在函数定义外定义的变量和使用关键字static定义的变量的存储持续性为静态。他们在整个程序运行过程中都存在。3种 线程存储持续性c++11 多核处理器中很常见。如果变量是使用thread_local声明的,则其生命周期和所属线程一样长。 动态存储持续性 使用new运算符分配的内存将一直存在,直到使用delete运算符将其释放或程序终止为止。有时被称为自由存储或堆。 作用域和链接 作用域描述了名称在文件的多大范围可见。 作用域为局部的变量只能在定义它的代码块中用。 作用域为全局的变量在定义位置到文件结尾之间都可用。 自动变量为局部作用域。静态变量为全局作用域还是局部作用域取决于它是如何被定义的。 在函数原型作用域中使用的名称只在包含参数列表的括号内使用。 在类声明的成员的作用域为整个类。 在名称空间中的声明的变量的作用域为整个名称空间。全局作用域是名称空间作用域的特例。 c++函数的作用域为整个类或整个名称空间。但不能是局部。因为不能在代码块中定义函数。如果函数作用域为局部,则只对之间可见。不能被其他函数调用。 链接性描述了名称如何在不同单元间共享

C++ const 引用 指针

你离开我真会死。 提交于 2019-12-05 15:32:39
先简单回忆一下常量的性质: Copy int main() { const int buffSize = 512; buffsize = 512; //× buffSize是常量 } 初始化时: Copy const int i = get_val(); //√ 运行时初始化 const int j = 42; //√ 编译时初始化 const int k; //× k未经初始化 当用一个对象去初始化另外一个对象,他们是不是const就无关紧要 Copy int i = 42; const int ci = i; int j = ci; ci是整形常量,但ci的常量特征仅仅在执行 改变ci 的操作时才会发挥作用 const和引用 # 对常量的引用 # ·把引用绑定到const对象上,称之为对常量的引用 对常量的引用不能用作修改它所绑定的对象,引用 及其 引用的对象 都是常量 Copy const int ci = 1024; const int &r1 = ci; 需要注意的是: Copy const int ci = 1024; const int &r1 = ci; r1 = 42; //× r1是对常量的引用 int &r2 = ci; //× r2是一个非常量引用,ci是一个常量对象 因为不允许把 ci 用作修改它所绑定的对象,所以也不能通过引用去改变ci(假设第四句合法

C++之使用对象前先初始化

主宰稳场 提交于 2019-12-05 15:23:53
1.内置类型 当需要使用一个int类型的变量时,我们应该先对其进行初始化,例如: int x=0; //..... 在后续中使用x变量 2.一个类里面的成员变量初始化 初始化类里面的成员变量时,尽量使用初始化列表对其进行初始化,例如: class Forest { public: Forest(const std::string str,int num); private: string m_forestName; int m_treeNum; } 1)当用以下方式实现构造函数时,: Forest(const std::string str,int num) { m_forestName=str; // 这属于赋值操作,而非初始化操作,初始化在进入到构造函数体之前已经被初始化 m_treeNum=num; } 2)因此可以尽量使用初始化列表进行初始化,实现如下: Forest(const std::string str,int num) :m_forestName(str), //这种属于初始化 m_treeNum(num) { } 第二种相对于第一种来说要高效一些,原因如下: 第一种首先调用default构造函数为m_forestName设初值,然后立刻再赋予新值;第二种在初始化列表中针对各个成员变量而设的实参,被拿去直接作为各成员变量的实参 来源: https://www

JavaSE学习总结

孤者浪人 提交于 2019-12-05 11:23:42
1. Java的三大特性 1.1 封装 所谓的封装即是将使用访问修饰符private将对象的属性私有化,同时提供一些可以被外界访问其属性的方法,控制在程序中属性的读写访问级别。封装的目的在于保证安全性和简化编程,调用者不需要了解具体的实现过程,只需要调用即可。 1.2 继承 所谓的继承是指可在已存在的类上进行扩展,从而获得一个新的类。新类除了拥有父类的属性和方法之外,还可以定义自己的属性和方法,实现对原有类的扩展。通过继承可以很好地复用之前的代码。 注意事项 子类拥有父类对象的所有属性和方法(包括私有属性和方法),但父类的私有属性和私有方法,其子类是无法访问的,只是拥有; 子类可拥有属于自己的属性和方法,实现对父类的扩展; 子类可以对父类的一些方法进行自己独有的实现(即重写Override)。 1.3 多态 所谓多态,简单来说就是同一个行为(方法)在不同情况下有着不同的表现。 重点 多态有两种形式:编译时多态和运行时多态,即overload和override 编译时多态,即overload:重载最常见的地方就是一个类的构造方法。一个类可以有一个或多个构造方法,这些构造方法的名字相同,但具体参数不同; 运行时多态,即override:重写最常见的就是重写toString()方法。toString()是Object中的一个方法,而Object类是所有类的父类。所以当定义一个新的类时

类和对象(下)C++

拟墨画扇 提交于 2019-12-05 03:22:32
1. 再谈构造函数 构造函数调用之后,对象中已经有了一个初始值,但是不能将其称作为类对象成员的初始化,构造 函数体中的语句只能将其称作为赋初值,而不能称作初始化。因为初始化只能初始化一次,而构造函数体内 可以多次赋值。 class Date { public: //这样的构造函数中是赋初始值,不是初始化 //Date(int year,int month,int day) //{ // _year = year; // _month = month; // _day = day; //} Date(int year, int month, int day) :_year(year) //初始化列表 用:后面个参数赋值用,隔开,最后一个参数后不加分隔符 , _month(month) , _day(day) {} private: int _year; int _month; int _day; }; int main() { Date d1(2016, 6, 6); return 0; } 注意: 1. 每个成员变量在初始化列表中只能出现一次(初始化只能初始化一次) 。 2. 类中包含以下成员,必须放在初始化列表位置进行初始化: 引用成员变量 const成员变量 类类型成员(该类没有默认构造函数 3. 尽量使用初始化列表初始化,因为不管你是否使用初始化列表,对于自定义类型成员变量

C++ vector初始化方式

空扰寡人 提交于 2019-12-05 02:39:11
C++的初始化方法很多,各种初始化方法有一些不同。 (1): vector<int> ilist1; 默认初始化,vector为空, size为0,表明容器中没有元素,而且 capacity 也返回 0,意味着还没有分配内存空间。这种初始化方式适用于元素个数未知,需要在程序中动态添加的情况。 (2): vector<int> ilist2(ilist); vector<int> ilist2 = ilist; 两种方式等价 ,ilist2 初始化为ilist 的拷贝,ilist必须与ilist2 类型相同,也就是同为int的vector类型,ilist2将具有和ilist相同的容量和元素 (3): vector<int> ilist = {1,2,3.0,4,5,6,7}; vector<int> ilist {1,2,3.0,4,5,6,7}; ilist 初始化为列表中元素的拷贝,列表中元素必须与ilist的元素类型相容,本例中必须是与整数类型相容的类型,整形会直接拷贝,其他类型会进行类型转换。 (4): vector<int> ilist3(ilist.begin()+2,ilist.end()-1); ilist3初始化为两个迭代器指定范围中元素的拷贝,范围中的元素类型必须与ilist3 的元素类型相容,在本例中ilist3被初始化为{3,4,5,6}。注意

C++类的定义和对象

时光总嘲笑我的痴心妄想 提交于 2019-12-05 01:51:46
C++类的定义和对象 类的成员变量称为类的属性(Property),将类的成员函数称为类的方法(Method)。在面向对象的编程语言中,经常把函数(Function)称为方法(Method)。 类的定义 class Student{ public: //成员变量 char *name; int age; float score; void say(){ cout<<name<<age<<score<<endl; } }; 类只是一个模板(Template),编译后不占用内存空间. class C++ 中新增的关键字,用来定义类。 成员变量和成员函数,它们统称为类的成员(Member) 创建对象: Student Lilei; //创建对象 Student 是类名, liLei 是对象名。和使用基本类型定义变量的形式类似, 从这个角度考虑,我们可以把 Student 看做一种新的数据类型,把 liLei 看做一个变量。 在创建对象时,class 关键字可要可不要 class Student LiLei; //正确 Student LiLei; //同样正确 还可以创建对象数组: Student allStu[100]; 使用对象指针: Student stu; //pStu 是一个指针,它指向 Student 类型的数据,通过 Student 创建出来的对象 Student

JAVA知识总结(二):封装

家住魔仙堡 提交于 2019-12-04 15:22:06
时隔近一年,我突然想起来这个文章还没有发完,所以就继续开始写。也不知道自己上次写到哪里了,不管了这里从面向对象的三个特性说起。 类和对象 在这之前,我们先了解什么是对象,已经什么是面向对象?对象:万物皆对象,现实中实际存在的事物都可以看成一个对象。而面向对象就是人在关注对象, 关注事物的信息。那什么是类?类就是模子,通常用于确定对象将会拥有的特征(属性)和行为(方法)。也就是说对象是类的具体存在,而类则是对象的抽象化。苹果是一个类,你手里拿的苹果就是一个实例化的对象。 刚才说了对象具有属性和方法,那么属性和方法又是什么呢?属性就是对象具有的各种静态特征,通常用来说明对象有什么;而方法就是说明对象具有的各种动态行为,也即对象能做什么。 假如我有一辆吉普车,它的颜色,价格,型号就是属性;而它能加速,减速,停止就是具有各种方法。 创建类的一般步骤为:创建类==》实例化对象==》书写具体的逻辑。 通常我们在书写类的时候,都需要遵循单一职责原则(单一功能原则),也就是说 一个类应该有且只有一个引起功能变化的原因。如果在一个类当中承担的功能越多,那么它的交融,耦合性就越高,被复用的可能性就越低。特别是因为耦合度高,可能会因为一个职责的变化,引起其他职责的变化,进而影响整个程序的运行,这一点是我们所不想看到的。 实例化对象的过程可以分为三步:声明对象,实例化对象,将两者进行绑定