² 函数定义:函数的返回类型、函数名称、函数的参数列表、函数主体
² exit()终止整个程序,但必须传给exit()一个值,此值将成为程序结束时的状态值:
#include <cstdlib>
exit(-1);
² 想知道某个类型的最大最小值,可查询标准程序库中的numeric_limits calss:
#include <limits>
int max_int = numeric_limits<int>::max();
double min_db1 = numeric_limits<double>::min();
² 如何一行打印出n个元素:
cout << elem << ( !(ix%n ) ? “\n\t” : “ ” );
² 调用函数
如果想让参数和传入的实际对象产生关联,也就是所谓的传址(pass by reference),最简单的做法就是将参数声明为reference:
void swap ( int &val1, int &val2 );
void bubble_sort( vector<int> &vec );
将参数声明为reference的理由之一是,希望得以直接对所传入的对象进行修改;
第二个理由是,为了降低复制大型对象的负担:
void display ( const vector<int> &vec )
{
for( intix=0; ix < vec.size(); ++ix )
{
cout<< vec[ix] << ‘ ‘;
cout<< endl;
}
}
我们声明了一个reference to const vector,因为函数并不会改变vector的内容,少了const也不会造成错误。但加上const更容易让人了解,我们以传址的方式来传递vector,为的是避免重复操作,而不是为了在函数中对它进行修改。
如果我们愿意,也可以将vector以pointer形式传递。这和以reference传递的效用相同:传递的对象是地质,而不是整个对象的复制品,唯一的差别在于用法不同:
void display ( const vector<int> *vec )
{
if ( !vec){
cout<< “Error… \n”;
return;
}
…
}
int main()
{
…
display (&vec );
}
pointer可能指向某个不实对象,所以使用时一定要先确定其值并非为0。
² 动态内存管理(P49)
² 提供默认参数值
void bubble_sort ( vector<int> &vec, ofstream*ofil = 0 )
如何在cout和输入文件之间转换(P52)
void display ( const vector<int> &vec,ostream &os = cout )
{
for ( intix = 0; ix < vec.size(); ++ix )
os << vec[ix] << ‘ ‘;
os<< endl;
}
规则一:默认值的决议工作由最右边开始进行,如果我们为某个参数提供了默认值,那么这个参数右侧的所有参数都必须也具有默认数值才行
规格二:默认值只能定义一次,可以在函数声明处,也可以在函数定义处,但是不能在两个地方都指定。为了更高的可见度,我们决定将默认值置于函数声明处,而非定义处:
//头文件声明,其中制定了参数默认值
//让我们称此头文件为my.h
void display( const vector<int>&,ostream&=cout );
//程序本文含上述头文件
//至于函数定义处,并没有指定参数的默认值
#include “my.h”
void display( const vector<int> &vec, ostream&os )
² 声明inline函数
将函数声明为inline,表示要求编译器在每个函数调用点上,将函数内容展开。面对一个inline函数,编译器可以将函数的调用操作改以一份函数码副本取而代之,这使我们在效率上得到改善,其结果等于是把三个函数写入fibon_elem体内,但依然维持3个独立的运算单元。
只要在函数前面加上关键字inline,便可以将函数声明成inline(inline函数的定义常常被放在头文件中):
inline bool fibon_elem( int pos, int &elem )
² 重载函数(P56)
² 模板函数(P58)
² 函数指针
函数指针必须指明其所指向的函数的返回值类型及参数表:
//希望指向的一组函数
const vector<int> *fibon_seq( int size );
const vector<int> *lucas_seq( int size );
const vector<int> *pell_seq( int size );
const vector<int> *triang_seq( int size );
const vector<int> *square_seq( int size );
const vector<int> *pent_seq( int size );
//定义的指针
const vector<int>* (*seq_ptr) ( int );
//我们可以给予函数指针初值,如果初值为0,表示并未指向任何函数
const vector<int>* (*seq_ptr) ( int ) = 0;
//如果想取得函数指针
seq_ptr = pell_seq;
² 枚举类别
enum ns_type { ns_a, ns_b, ns_c,ns_d, ns_e, ns_f };
默认情况下,第一个枚举成员的值为0,接下来的一个要比前一个多1
² 函数的定义只能有一份,但可以有很多份声明。我们不把函数的定义纳入头文件,因为同一个程序的多个代码可能会含入这个头文件。
自定义的头文件:#include “XXX.h”