临近期末考试,借助C++ Primer Plus 这本书,进行相关知识补充和旧知识点的温习
目录
1、无符号类型
2、数组名的理解
3、函数指针的基础知识
(1)获取函数的地址
(2)声明函数指针
4、内联函数
5、引用
引用和指针的区别
6、文件操作
读文件
写文件
make_pair和pair的区别
find函数结合map(multimap)的查找
容器元素插入方式
构造函数、析构函数与文件操作
浅复制与深复制
浅复制概念
1、无符号类型
无符号类型是一个不太常用的知识点,也正是因为不太常用,所以遗忘了。
int、short、long、long long 这四种类型均属于符号类型,他们都有对应的不能储存负数值的无符号变体,优点就是增大变量能够储存的最大值(就是把负数的空间给正数)当然,仅当数值不为负数时,才应使用无符号类型。如人口、树木的棵数等等。创建无符号版本的基本类型,只需要使用关键字unsigned即可。
例如:
unsigned short change; unsigned int a; unsigned c; //同样是指的是整型对应的无符号类型 unsigned long f; unsigned long long v;
2、数组名的理解
数组名视为指针。c++将数组名解释为其第一个元素的地址。
3、函数指针的基础知识
(1)获取函数的地址
只要使用函数名(后面不跟参数)就可以获取函数的地址,举个例子L假如think()是个函数,那么think就是该函数的地址,只要将函数作为参数进行传递,必须传递函数名。此时就要区分传递的是函数的地址还是函数的返回值。
process(think);//传递think的地址给progress() thought(think());//传递think()的返回值给thought()
(2)声明函数指针
声明指向某种数据类型的指针时,必须指定指针指向的类型。同样声明指向函数的指针时,也必须指定指针指向的函数类型。
4、内联函数
有关格式:
在函数声明前加上关键字inline
在函数定义前加上关键字inline
5、引用
引用变量可以理解为是给已定义的变量起的别名。引用变量的主要作用是用作函数的形参。通过将引用变量用作参数,函数将使用原始数据,而并不是副本,通俗易懂的来说就是更改其中的任意一个值,另外一个变量也会跟着动。(如此一来,除了指针外,引用也为函数处理大型结构提供了一种非常方便的途径)
下面举个例子:
#includeusing namespace std; int main() { int a=101; int &b=a; return 0;} //请注意,下述语句的&运算符不是地址运算符,其中的&a表示a引用的变量的地址 int &a=b;
简单的例子帮助理解:
#includeusing namespace std; int main() { int a; int &bb=a; a=100; cout<<&bb; //输出bb对应的地址(应当和a的地址是相同的) cout< 引用和指针的区别
引用和指针存在一些细微的差别,比如必须在声明引用是将其初始化,却不能像指针那样,先声明再赋值。
6、文件操作
读文件
fstream指的是包含写入和读出的文件流,此处定义的a就是一个文件流对象,后面规定的读写方式是out也就是写入文件。后面的is_open函数,是用来判断文件是否被打开的。
a<<"......"指的是写入文件的内容。每运行一次,所生成的文件内容都是这些,因为是out的写入方式,每次运行都会先删除之前文件内的信息,假如想要做出尾加操作,那么应改成app的方式进行文件读写操作。如此一来记录就会被保留,制作ATM机模拟系统时就应该使用app的操作方式。
操作完成后,不要忘记关闭文件对应的链接。
注意:当没有生成的文件时,系统会自动生成一个该名称的文件。假如是in(读文件操作),那么就会报错,假如是out,就会自动生成。
#include#include using namespace std; int main() { fstream a; a.open("test.txt",ios::out); if(!a.is_open()) cout<<"can not open the file"; a<<"马上就要考试了啥都不会怎么办"< 写文件
#include#include using namespace std; int main() { fstream s; string message; s.open("文件的读写操作.txt",ios::in); if(s.is_open()) { cout<<"文件以成功打开或者成功创建"< >message; s.close(); cout< 读入文件读写操作中的信息,然后输出所获得的信息,进行后续工作。
make_pair和pair的区别
make_pair():
无需写出型别, 就可以生成一个pair对象
例:
std::make_pair(42, '@');
而不必费力写成:
std::pair(42, '@') find函数结合map(multimap)的查找
algorithm头文件的find()。
使用方法:find(begin,end,value),一般用 容器.end()来判断查找成功与否。
参数1 是容器或者数组的起始地址(容器.begin()或者数组名),也可以是任意地址,不非法即可;参数2是结束查找的地址(容器.end()或者数组名+长度),value是想要查找的字符或者字符串
查找成功将返回迭代器(容器)或者指针(数组),否则返回end()
find返回的是迭代器
假如找不到,就会返回end()
void operation::find_idnum(string idnum1) { m2=idnumc.find(idnum1); // mapidnumc; if(m2!=idnumc.end()) { cout<<"找到"< second]; //vector person; } } 用equal_range来查找multimap的符合条件的内容的元素区间。
使用multimap、map是自动排序的,会将其中的信息进行排序,所以用lower_bound和upper_bound查找出来的范围就可以高效使用了。
容器元素插入方式
可以使用for循环或者while循环进行插入操作,但是再写课程设计ATM机时,发现使用while循环时会出现错误,还是使用for循环保险(毕竟使用while循环时需要写好多语句,可能会出现某些差异。)
构造函数、析构函数与文件操作
构造函数、析构函数往往不那么引人注意,但当我们和文件操作相结合时,就应该在他们的函数体中假如读文件和写文件操作。
浅复制与深复制
浅复制概念
●在用一个对象初始化另一个对象时,只复制了数据成员,而没有复制资源,使两个对象同时指向了同一资源的复制方式称为浅复制。
即:对于复杂类型的数据成员只复制了存储地址而没有复制存储内容
●默认复制构造函数所进行的是简单数据复制,即浅复制



