第5章 用函数封装程序功能
5.1 函数就是一个大"箱子"
5.1.1 函数的声明和定义
//p112 很多OJ网站上的第一题 #include <iostream> using namespace std; int main() { int a,b; cin>>a>>b; cout<<a+b<<endl; return 0; } //写成函数形式见下面:
#include <iostream> using namespace std; int add(int a,int b); //函数声明之后,具体函数定义可以在后面 int main() { int a,b; cin>>a>>b; cout<<add(a,b)<<endl; //调用函数之后,马上输出 return 0; } int add(int a,int b) { return(a+b); }
5.1.2 函数调用机制
//p116 函数的嵌套调用 #include <iostream> using namespace std; int sqr(int n) { return(n*n); } int sqrsum(int a,int b) { return(sqr(a)+sqr(b)); } int main() { int a,b; cin>>a>>b; cout<<sqrsum(a,b)<<endl; //a^2+b^2 return 0; }
5.1.3 函数的声明与函数调用
5.1.4 函数参数的传递
//p119 #include <iostream> using namespace std; int add(int &i,int &j) //C++中的传址! { int a,b; a=i; b=j; i=i*2; j=j+10; //改变了i,j return(a+b); } int main() { int i,j; cin>>i>>j; cout<<"i+j="<<add(i,j)<<endl; cout<<"i="<<i<<" "<<"j="<<j<<endl; return 0; }
5.1.5 函数的返回值
//p121 #include <iostream> using namespace std; int sum(int *a,int n) //可以这样以数组为参数 { int i,s=0; for(i=0;i<n;++i) s += a[i]; return s; } int main() { int i,a[10]; for(i=0;i<10;++i) { a[i]=rand()%20; cout<<a[i]<<" "; } cout<<endl; cout<<sum(a,10)<<endl; return 0; }
比赛与做工程不同,当传递参数不确定时,可以以全局变量的方式进入。
5.2 内联函数
5.2.1 用体积换速度的内联函数
//p124 #include <iostream> using namespace std; //加上inline,就成为了内联函数 inline bool iseven(int i) { return( 0==i%2 ); } int main() { int i,sum=0; for(i=0;i<=100;++i) if(iseven(i)) ++sum; cout<<sum<<endl; return 0; }
5.2.2 内联函数的使用规则
5.3 重载函数
5.3.1 重载函数的声明
//p126 根据参数类型不同,调用同名不同函数 #include <iostream> using namespace std; int add(int a,int b) { return a+b; } double add(double a,double b) { return a+b; } int main() { cout<<add(1,2)<<endl; //cout<<add(1,2.2)<<endl; //编译会通不过 cout<<add(1.2,2.3)<<endl; return 0; }
5.3.2 重载函数的解析
5.4 函数设计的基本规则
5.4.1 函数声明的设计规则
5.4.2 函数体的设计规则