live long and prosper
上面说的有点云里雾里,我们看下下面的代码(ch9_7)
//---------------------
// ch9_7.cpp
//---------------------
#include<iostream>
using namespace std;
//---------------------
int array[6][4]={{60,80,90,75},
{75,85,65,77},
{80,88,90,98},
{89,100,78,81},
{62,68,69,75},
{85,85,77,91}};
//---------------------
int getLevel(int grade[], int size);
//---------------------
int main(){
int typeA=0,typeB=0;
int student=6;
int gradesize=4;
for(int i=0; i<student; i++) //处理所有的学生
if(getLevel(array[i], gradesize))
typeA++;
else
typeB++;
cout<<"number of type A is "<<typeA<<endl;
cout<<"number of type B is "<<typeB<<endl;
}//--------------------
int getLevel(int grade[], int size){
int sum=0;
for(int i=0; i<size; i++) //成绩总分
sum+=grade[i];
if(sum/size >= 80) //平均分大于80?
return 1; //type A student
else
return 0; //type B student
}//--------------------
在getLevel函数中,如果大于平均分,返回1,否则返回0.1就是A类,0就是B类。
在main函数中使用了if else语句来计算A类学生和B类学生的数量,那么可不可以在main函数中直接调用getLevel函数实现计算?
我们再看到下面的代码(ch9_8)
//---------------------
// ch9_8.cpp
//---------------------
#include<iostream>
using namespace std;
//---------------------
int array[6][4]={{60,80,90,75},
{75,85,65,77},
{80,88,90,98},
{89,100,78,81},
{62,68,69,75},
{85,85,77,91}};
//---------------------
int& level(int grade[], int size, int& tA, int& tB);
//---------------------
int main(){
int typeA=0,typeB=0;
int student=6;
int gSize=4;
for(int i=0; i<student; i++) //处理所有的学生
level(array[i], gSize, typeA, typeB)++; //函数调用作为左值
cout<<"number of type A is "<<typeA<<endl;
cout<<"number of type B is "<<typeB<<endl;
}//--------------------
int& level(int grade[], int size, int& tA, int& tB){
int sum=0;
for(int i=0; i<size; i++) //成绩总分
sum += grade[i];
return (sum/size >= 80 ? tA : tB);
}//--------------------
看到上边的代码,定义level函数时使用&运算符,表示定义函数引用对象,在main函数中可以不使用条件语句,通过for循环反复调用该函数,实现A,B两类学生的分别。
level函数中对于A,B的参数也是引用,在main函数中可以直接被使用。