st member function)、构造函数(constructor)
this指针,每个成员函数(除了static成员函数外)都有一个额外的、隐含的形参this。
常量成员函数(const member function),const this指针
构造函数的初始化列表(constructor initializer list)
合成的默认构造函数(synthesized default constructor),不会自动初始化内置类型的成员!一般适用于仅包含类类型成员的类。
17.重载函数(overloaded function):出现在相同作用域中、具有相同的名字、形参表不同
函数重载(function overloading)与重复声明(redeclaration)的区别
1)重载与作用域
一般来说,局部地声明函数是一种不明智的选择。(会屏蔽而不是重载在外层作用域中声明的同名函数)
在C++中,名字查找发生在类型检查之前。
2)函数重载确定(overload resolution,即函数匹配function matching)是将函数调用与重载函数集合中的一个函数相关联的过程。
3)函数重载确定的过程:
第一步,确定该调用所考虑的重载函数集合。该集合中的函数称为候选函数(candidate function),它是与被调函数同名的函数,并且在调用点上它的声明可见。
第二步,选择可行函数(viable function):从候选函数中选择一个或多个函数,它们能用该调用中指定的实参来调用。
第三步,寻找最佳匹配
4)实参类型转换
精确匹配(exact match)
通过类型提升(promotion)实现的匹配
通过标准转换(standard conversion)实现的匹配
通过类类型转换(class-type conversion)实现的匹配
5)可以基于函数的引用或指针形参是指向const对象还是指向非const对象,实现函数重载。(不能基于指针本身是否为const来实现函数的重载)
仅当形参是引用或指针时,形参是否为const才有影响
18.指向函数的指针
bool (*pf)(const string &, const string &);//pf points to function
bool *pf(const string &, const string &); //pf is a function that returns a bool*
1)用typedef简化函数指针的定义(见下例)
2)可用函数名对函数指针做初始化或赋值(见下例)。(直接引用函数名等效于在函数名上应用取地址操作符)
3)指向函数的指针,可以不需要使用解引用操作符直接通过指针调用函数:
typedef bool (*cmpFcn)(const string &, const string &);
cmpFcn pf = lengthCompare; //lengthCompare is the name of a function
html">lengthCompare("hi","bye"); //direct callpf("hi","bye");
(*pf)("hi","bye");
4)函数指针的形参
5)返回指向函数的指针(理解的最佳方法:从声明的名字开始由里而外理解)
6)指向重载函数的指针
ps:4、5、6待补充。
标准IO库
1.IO类型通过继承关联,所以可以只编写一个函数,而将它应用到三种类型的流上:控制台、磁盘文件、字符串流。
2.出于某些原因,标准库类型不允许做复制和赋值操作(阐述类和继承时说明原因)。有两层含义:
1)不存在存储流对象的指针或引用;(只有支持分支的元素类型可以存储在vector或其他容器类型里)
2)形参和返回类型也不能为流类型。(传递和返回IO对象时,需要用引用和指针)