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都是文件。

有两个规则:

  1. 默认值的解析是从右侧开始的,如果我们为某个参数提供了默认值,那么这一参数右侧的所有参数都必须也具有默认值。
  2. 默认值只能指定一次,在声明处或定义处。常放在声明处。

局部静态对象

使用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

泛型编程风格


Essential C++ Notes
http://example.com/2022/08/25/Essential C++ Notes/
作者
Jie
发布于
2022年8月25日
许可协议