第二章 基本数据类型与输入/输出
如果没有专门指定,第1个符号常量的枚举值就是0,其他枚举值依次为1往上加。可以给枚举符指定枚举值,也可以部分指定枚举值。不能用整数值赋给枚举变量。
常量定义时必须初始化,编译前确定值。
setfill控制符可以确定setw所规定的的间隔字符
%-5.3s%
中的负号表示左对齐,如果没有负号则默认右对齐。5表示格式宽度,3表示截取字符串中第3个字符。
第三章 表达式和语句
结合性,指表达式中出现同等优先级的操作符时,该先做哪个操作的规定。
! ~ + - ++ -- & * sizeof new delete
从右向左结合
?: = *= /= += -= |= <<= >>=
从右向左结合
增量和减量操作符要求操作数是左值,前增量结果是左值,后增量结果不是左值。
在一个条件运算符表达式中,如果后面两个表达式值类型相同都是左值,则该条件运算符表达式的值为左值表达式。如果逗号表达式最后一个表达式为左值,则该逗号表达式为左值。
第五章 函数
默认值可以是全局变量、全局常量,甚至是一个函数
第六章 程序结构
extern int n表示该变量n不在本文件中分配空间,在程序其他文件中分配空间。默认的函数声明总是extern的。
全局静态变量使得该变量称为由定义该变量的源文件独享。
具有文件作用域的变量具有静态生命期。全局变量、静态全局变量、静态局部变量具有静态生命周期。
动态生命期的变量驻扎在内存的堆中,用free或delete释放变量或程序结束时,生命期结束。
条件编译协调多个头文件。
第八章 指针
指针具有一定类型,是值为地址的变量,该地址是内存中另一个该类型变量的存储位置。指针是具有某个类型的地址
常量指针定义const int *pi=&a
告诉编译器,*pi
是常量,不能将*pi
作为左值进行操作
指针常量定义int *const pc=&b
告诉编译器,pc
是常量,不能作为左值进行操作,但允许修改间接访问值,*pc
可以修改。
常量指针常量定义const int *const cpc=&b
,告诉编译器,cpc
和*cpc
都是常量,都不能作为左值进行操作。
第九章 引用
引用在声明时必须被初始化。引用运算符只在声明时被使用,放在类型名后面。
无引用的引用,无指针的指针。
c++不区分变量的const引用和const变量的引用
第十章 结构体
数组是单纯空间意义上同类数据实体的集合,结构大小固定可以被赋值。
用结构参数引用传递,无需给另一个结构变量赋值,无需在返回时复制结构值给临时结构变量。
类名允许与其他变量名或函数名相同。
十二章 构造函数
构造函数没有返回类型,函数体中不允许返回值。
在类中声明的对象成员的次序依次调用其构造函数。
只要一个类定义了一个构造函数(不一定是无参构造函数),c++就不再提供默认构造函数。如果创建全局对象或静态对象,则对象的位模式全0,否则对象值随机。
冒号语法使得常量数据成员和引用数据成员的初始化成为可能。
所有全局对象都在main前构造。
全局对象构造时无特殊顺序,按照出现的顺序依次构造。
十三章 面向对象程序设计
全局变量、静态数据、常量、字面量存在全局数据区。类成员函数和非成员函数代码在代码区。局部变量、函数参数、返回数据、返回地址存放在栈区。余下空间作为堆区。
从堆上分配对象数组,只能调用默认构造函数,不能调用其他构造函数。
如果类需要析构函数来析构资源,则需要深拷贝构造函数。
把构造函数用于类型转换,只会尝试含有一个参数的构造函数。如果有二义性,则放弃尝试。
十五章 静态成员与友元
静态数据成员确实是在程序一开始运行时必须存在。因为函数在程序运行中被调用,所以静态数据成员不能在任何函数分配空间和初始化。
一个静态成员函数不与任何对象联系,不能对非静态成员进行默认访问。静态成员函数没有this指针,非静态成员函数有一个指向当前对象指针this。
友元函数不是成员函数,它是类的朋友,因而能够访问类的全部成员。
一个类的成员函数可以使另一个类的友元。整个类是另一个类的友元,该友元称为友类。友类的每个成员函数都可以访问另一个类中的保护或私有数据成员。
十六章 继承
可以通过自身成员函数访问父类private成员
基类私有成员在派生类下是隔离的,必须通过基类的保护成员或公有成员函数访问。对于私有继承,派生类的成员函数可以访问基类保护和公有成员,却不能直接访问基类私有成员。通过保护成员或公有的基类成员函数访问基类私有成员。
调整访问控制属性的前提是派生类中该成员必须可见
多继承程序必须在重名前说明基类
虚拟继承的虚拟和虚拟函数的虚拟没有任何关系
1.构造函数按以下顺序调用:1.任何虚拟基类的构造函数按它们被继承的顺序构造。2.任何非虚拟基类的构造函数按照它们被继承的顺序构造。3.任何成员对象的构造函数按照它们声明的顺序调用。4.类自己的构造函数
十七章 多态
在运行时根据其类型确认调用哪个函数的能力称为多态或迟后联编。
若语言不支持多态,则不能被称为面向对象的语言。
为了指名某个成员函数具有多态性,用virtual标志其为虚函数。该虚函数性质自动向下带给其子类。
虚函数在基类与子类仅仅是名字相同,参数类型不同或返回类型不同,即使加上了virtual也不迟后联编。
子类的虚函数返回子类指针或引用,进行迟后联编。
只有类的成员函数才能说明为虚函数。静态成员函数不能是虚函数。内联函数不能是虚函数。构造函数不能是虚函数。
从相似的类中将共有特征提取出来的过程称为分解。
c++允许程序员声明一个不能有实例对象的类,唯一用途是被继承。这种类被称为抽象类。一个抽象类至少具有一个纯虚函数。在纯虚函数的声明后“=0”表示程序员将不定义该函数。一个抽象类不能有实例对象。
不能创建一个抽象类,但可以声明抽象类的指针或引用。
十八章 运算符重载
不能重载点操作符.
,域作用操作符::
,访问操作符.
,指针操作符->
,条件操作符?:
,=
,()
,[]
,->
必须为成员形式
拷贝构造函数执行时,对象不存在,起初始化作用。
赋值运算符分两部分,第一部分与析构函数类似,在其中取消对象已经占用的资源。第二部分与拷贝构造函数类似,分配新的资源。
十九章 I/O流
用getline()读取输入行。
二十章 模板
类模板是模板的定义,模板类是实实在在的类定义,由类模板生成。
编译器首先匹配重载函数,然后再寻求模板的匹配。
二十一章 异常
try块后紧跟多个catch()语句。catch()括号中的声明只能容纳一个形参,当类型与抛掷异常类型匹配时,catch()块捕获了一个异常,进行异常处理。
任意数量的catch()紧随出现在try语句块后。