Essential C++ Notes
2022/5/28
第一章
p1~p34
布尔值(Boolean).
命名空间
是一种将库名称封装起来的方法。
为什么string class
采用erase()而非delete()来表示“删去一个字符”的原因。是因为delete是常用语言。
另外一种不同的初始化语法
构造函数语法(constructor syntax):
int num_tries(0);
其目的是处理需要多值初始化的对象。
array和vector
array的大小必须是常值表达式,即不需要在运行时求值的表达式。
a+b这种算求值,而a不算。
array是内置的,不需要包含头文件,使用vector要包含#include <vector.h>
头文件。
tamplate class和class tamplate
tamplate <typename A> #把A变为模版
A可以为任意类型。你用int,A救会变成int。
vector不支持初始化列表的方式。
vector知道自己的大小。
cout << elem_seq.size()
在使用指针时,必须先确定它的确只想某个对象。
检验指针是否位null:
if (!pi)
任何指针都可以被初始化为零。
rand()和srand()函数位于cstdlib头文件中。
.
dot,成员选择符和 ->
arrow,成员选择符
Standard Template Library, STL.
文件的读写
fstream头文件。
打开可供输出的文件,定义一个ofstream对象。
打开文件名和打开模式。
cerr和cout的区别
cerr无缓冲。
endl操作符
插入一个换行符,清除输出缓冲区。
打开一个读文件,定义ifstream对象。
同时读写一个文件,定义一个fstream文件,并传入ios_base::in|ios_base::app
参数。
C++头文件
使用#include
时没有.h
后缀。
打开文件时注意检查是否成功打开。
第二章
p35~
使用cstdlib
中的exit()
函数终止程序。
引用和指针的区别
引用的本质
就是一个指针常量。指向不可以改动,但指向的值可以改动。
隐式退出点,没有return
语句时,位于最后一条语句之后。
动态内存管理
分配用new
释放用delete
new Type(initial_value);
int *pi;
pi = new int;
delete pi;
C++没有提供任何语法让我们得以从heap分配数组的同时为其元素设定初值。
释放数组有所不同:
delete [] pia;
提供默认参数值
C++允许我们为全部或部分参数设定默认值。如:
void display(ostream &os = cout)
cout和cin都是文件。
有两个规则:
- 默认值的解析是从右侧开始的,如果我们为某个参数提供了默认值,那么这一参数右侧的所有参数都必须也具有默认值。
- 默认值只能指定一次,在声明处或定义处。常放在声明处。
局部静态对象
使用static
关键词。
push_back
会把数值放在vector末端。
声明inline函数
将函数声明为inline
,表示要求编译器在每个函数的调用点上,将函数的内容展开。
如:
inline bool fibon_elem(int pos, int &elem)
{...}
inline
只是一种请求。
一般,体积小,常调用的函数被声明为inline
.
提供重载函数
函数重载机制(function overloading)
函数的参数列表不同,可以有相同的名称。但无法根据返回值判断。
函数模版机制(function tamplate)
template <typename elemType>
Void display_message(const string &msg, const vector<elemType> &It);
函数指针
pointer to function,
如:
const vector<int>* (*seq_ptr)(int);
函数的名称就是函数的地址。
枚举类型
enumerate type,enum
关键字。
默认情况下,第一个枚举值为0,接下来为1,以此类推。
如:
enum color{
red, blue, green
Yellow, grey
}; #red值为1
可用枚举类型作为索引值。
设定头文件
头文件一般不包含函数的定义,incline函数除外。
为了扩展incline函数,编译器在每个调用点上,都要取其定义。
extern