《C++程序设计教程》引用(C++)之函数调用左值

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函数中可以直接被使用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值