C++:函数

来源:互联网 发布:月球电影知乎 编辑:程序博客网 时间:2024/05/18 00:14

引用形参

如果希望改变调用的函数的实参,可以采用引用形参。

void swap(int &v1, int &v2){int tmp = v2;v2 = v1;v1 = tmp;}

每次调用函数,引用形参被创建并与相应实参关联。操作形参相当于对实参进行操作。
从 C 语言背景转到 C++ 的程序员习惯通过传递指针来实现对实参的访问。在 C++ 中,使用引用形参则更安全和更自然。
如果使用引用形参的唯一目的是避免复制实参,则应将形参定义为 const 引用

通过引用传递数组

void printValues(int (&arr)[10]){for (size_t i = 0; i != 10; ++i) {cout << arr[i] << endl;}}

形参格式 &arr 两边的圆括号是必需的,因为下标操作符具有更高的优先级。

多维数组的传递

再次强调:

int *matrix[10]; // 含有10个指针的数组
int (*matrix)[10]; //指向一个含有10个int元素的数组的指针

下面这条语句把 matrix 声明为二维数组的形式:
void printValues(int matrix[][10], int rowSize);

main: 处理命令行选项

int main(int argc,char *argv[]){...}或int main(int argc,char **argv){...}

第二个形参argv是C风格字符串数组,第一个形参argc则用于传递该数组中字符串的个数。
当将实参传递给主函数main时,argv中的第一个字符串通常是程序的名字,接下来的元素将额外的可选字符串传递给主函数main。例如:

prog -d -o ofile data0

则argc应设为5,argv会保存下面几个C风格字符串:

argv[0] = "prog";argv[1] = "-d";argv[2] = "-o";argv[3] = "ofile";argv[4] = "data0"

return语句

没有返回值的函数

不带返回值的return语句只能用于返回类型为void的函数。

注:可以返回引用(&)和非引用类型,但不要返回局部变量的引用

需要强调的是,递归函数如果有非void的返回类型,那么一定要返回相应的数据类型。但如果递归函数的返回类型是void,那么return语句可要可不要。因为return只是使函数立即结束返回了,而正常情况下,当函数执行完毕后,本来就会结束返回的。

默认实参

默认实参是通过给形参表中的形参提供明确的初始值来指定的。调用函数时,可以省略有默认值的实参,此时函数将使用默认实参值。例如

string screenInit(string::size_type height=24,                  string::size_type width=80,                  char background = ' ');

这样一来,下面的函数调用都是正确的:

string screen;screen=screenInit();screen=screenInit(66,256);screen=screenInit(66,256,' ');

内联函数避免函数调用的开销

在函数返回类型前加上关键字 inline 就可以将函数指定为内联函数,内联函数应该在头文件中定义。内联机制适用于优化小的、只有几行的而且经常被调用的函数。

类的成员函数

成员函数声明的形参表后面如果有const

double avg() const;

则说明 const 改变了隐含的 this 形参的类型,this 指针将是指向 const 对象的指针,const 成员函数只能读取而不能修改调用他们的对象的数据成员。
成员函数可以在类内和内外定义。在类外定义的成员函数置于源文件中。

注:->用于类类型的指针访问成员,而 . 用于类类型的对象访问成员。

构造函数

构造函数是特殊的成员函数,与其他成员函数不同,构造函数和类同名,而且没有返回类型
构造函数的定义

Sales_item(): units_sold((0),revenue(0.0) { }

构造函数的初始化列表

units_sold((0),revenue(0.0)

称为 构造函数的初始化列表,为类的数据成员指定初值。它跟在构造函数的形参表之后,以冒号开头。

函数指针

typedef bool (*cmpFcn)(const string &, const string &);

初始化:

假设有函数

bool lenth(const string &, const string &);

cmpFcn pf1 =0;//用0初始化cmpFcn pf2= lenth;//用同类型的函数初始化pf1=pf2;//用函数指针赋值

通过指针调用函数

指向函数的指针可以用于调用它所指向的函数。可以不使用解引用操作符*,直接通过指针调用:

cmpFcn pf= lenth;lenth("hi","bye");pf("hi","bye");(*pf)("hi","bye");
0 0
原创粉丝点击