基础语法
函数
指针形参:若函数的形参是指向非const类型的指针,则传递的实参只能是指向非const类型的指针;若函数形参是指向const类型的指针,则传递指向const和非const类型的指针都可以。原因是:可以将指向const对象的指针初始化为指向非const对象,但不可以让指向非const对象的指针指向const对象。
引用形参:如果函数有非const引用形参,则不能通过const对象进行调用。
在调用函数时,如果该函数使用非引用的非const形参,则既可以给函数传递const实参,也可以给函数传递非const的实参。原因是在C语言中,具有const形参或非const形参并无区别,都是实参的副本,这里主要是与C语言兼容。原因:实参传递时复制传递,可以用const对象初始化非const对象,反之亦然。
通过引用传递数组,编译器会检查数组实参大小与形参大小是否匹配。若直接传递数组,编译器只是传递了指向数组第一个元素的指针,并不进行数组大小的匹配。
如:void func(int (&arr)[10]);
传递多维数组方法:void func(int (arr*)[10]);或者void func(int arr[][10]);
如果一个函数的形参具有默认实参,那么,它后面所有的形参都必须具有默认实参。要给一个带默认实参的形参提供实参,那么也必须给它前面的带默认实参的形参提供实参。
在一个文件中,只能为一个形参指定默认实参一次,一般在声明中指定默认实参。若在定义中的形参表中指定默认实参,那么只有在包含该函数定义的源文件中调用该函数是,默认实参才有效,所以说,默认实参一般要定义在头文件中。
编译器隐式的将在类内定义的成员函数当做内联函数。
类中成员函数形参表后面的const表明this是指向const对象的指针,不能修改调用该函数的对象,这种函数叫const成员函数。
关于函数指针:
① Typedef bool (*cmpFcn)(const string&,const string&);表示cmpFcn是一种指向函数的指针类型名字。
② 函数指针不存在类型转换。
③ 调用函数指针的方法如:
函数声明为bool lengthCompare(const String&,const String&);
cmpFcn pf=lengthcompare;
lengthCompare(“hi”,”bye”);//函数名直接调用
pf(“hi”,”bye”);//函数指针调用
(*pf) (“hi”,”bye”);//函数解引用调用
④函数指针型的形参:
void useBigger(bool(const String&,const String&));
void useBigger(bool(*)(const String&,const String&));
标准IO库
IO对象不可复制或赋值。由于流对象不能复制,随意不能存在vector容器中。形参或返回类型不能为流对象。必须传递或返回IO对象的指针或者引用。引用必须是非const类型的。