您的位置:首页 > 其它

MOOC清华《面向对象程序设计》第7章:统计考试及格率v5.1(“记住”及格分数线)

2017-09-13 21:01 459 查看
为了让“及格分数线”能够被记住,可调用Score类的对象并赋初值。只有main函数修改了,其余代码段与前一篇博文一样。

//main.cpp

#include <iostream>
#include <cstdlib>
#include "ArrayCollection.h"
#include "LinkedListIterator.h"
#include "LinkedListCollection.h"
#include "Score.h"
using namespace std;

Score pass(70, 60, 60);
template <class _Iterator>
bool isPass(const _Iterator& p){
return (p->value[0] >= pass.value[0] &&
p->value[1] >= pass.value[1] &&
p->value[2] >= pass.value[2]);
}//注意:这个isPass的实现是有缺陷的,只适合于Score类型

template <class _iterator>
void analyze(_iterator begin, _iterator end, bool (*isPass)(const _iterator&)){
int passed = 0, count = 0;
for(_iterator p = begin; p != end; p++){
if(isPass(p))
passed++;
count++;
}
cout << "passing rate = " << (float)passed / count << endl;
}

int main(int argc, char** argv) {
Score sarray[3];
sarray[0] = Score(60, 60, 60);
sarray[1] = Score(70, 70, 70);
sarray[2] = Score(50, 80, 80);

ArrayCollection<Score> collection3(3, sarray);
LinkedListCollection<Score> collection4;
for(int i = 0; i < 3; i++)
collection4.addFirst(sarray[i]);

analyze(sarray, sarray + 3, isPass<Score*>);
analyze(collection3.begin(), collection3.end(), isPass<Score*>);
analyze(collection4.begin(), collection4.end(), isPass<LinkedListIterator<Score>>);

system("PAUSE");
return EXIT_SUCCESS;
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐