新手遇一个不懂的问题

IT保安 IT保安 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
来自c++ primer plus 第14章,程序清单14.2,代码如下
#ifndef STUDENTC_H_
#define STUDENTC_H_
#include <iostream>
#include <valarray>
#include <string>

using namespace std;

class Student
{
private:
string name;
typedef valarray<double> ArrayDb;
ArrayDb scores;
ostream & arr_out(ostream & os)const;
public:
Student():name("null student"),scores(){}
Student(const string &s):name(s),scores(){}
explicit Student(int n):name("nully"),scores(n){}
Student(const string &s,int n):name(s),scores(n){}
Student(const string &s,const ArrayDb & a):name(s),scores(a){}
Student(const char *str,const double *pd,int n):name(str),scores(pd,n){}
~Student(){}
double Average()const;
const string & Name()const;
double & operator[](int i );
double operator[](int i) const;
friend istream & operator>>(istream &is,Student &stu);
friend ostream & operator<<(ostream &os,Student &stu);
friend istream & getline(istream &is,Student &stu);
};

#endif

#include "student.h"

double Student::Average()const
{
if(scores.size()>0)
return scores.sum() / scores.size();
else
return 0;
}

const string & Student::Name()const
{
return name;
}

double & Student::operator[](int i)
{
return scores[i];
}

double Student::operator[](int i)const
{
return scores[i];
}

ostream & Student::arr_out(ostream & os)const
{
int i;
int lim = scores.size();
if(lim > 0)
{
for(i = 0;i > lim;i++)
{
os << scores[i] << " ";
if(i % 5 == 4)
os << endl;
}

if(i % 5 != 0)
os << endl;
}
else
os << "empty array!";
return os;
}

istream & operator>>(istream &is,Student &stu)
{
is >> stu.name;
return is;
}

istream & getline(istream &is,Student &stu)
{
getline(is,stu.name);
return is;
}

ostream & operator<<(ostream &os,Student &stu)
{
os << "scores for " << stu.name << ":\n";
stu.arr_out(os);
return os;
}

#include <iostream>
#include "student.h"

using namespace std;

void set(Student &sa,int n);

const int pupils = 3;
const int quizzes = 5;

int main()
{
Student ada[pupils] = {Student(quizzes),Student(quizzes),Student(quizzes)};
int i;
for(i = 0;i < pupils;++i)
set(ada[i],quizzes);
cout << "\nStudent list:\n";
for(i = 0;i < pupils;++i)
cout << ada[i].Name() << endl;
cout << "\nResult:";
for(i = 0;i < pupils;++i)
{
cout << endl << ada[i];
cout << "average: " << ada[i].Average() << endl;
}
cout << "Done!\n";

return 0;
}

void set(Student &sa,int n)
{
cout << "Please enter the student's name: ";
getline(cin,sa);
cout << "Please enter " << n << " quiz scores:\n";
for(int i = 0;i < n;i++)
cin >> sa[i];
while(cin.get() != '\n')
continue;
}


main函数里面倒数第三行代码不能理解,也就是set函数中:
for(int i = 0;i < n;i++)
cin >> sa[i];
根据功能,这行是输入每个对象对应的5次分数。
可是为什么cin >> sa[i],就是输入分数呢?sa是一个student对象啊,怎么能当做对象的socres成员接收数据呢?而且>>重载了用作接收name成员,所以我就百思不得解了!
期待给我一个指点,帮我解惑,谢谢!
...全文

相关推荐

Sky光·遇《图例指南》.pdf

光遇指南

yj_150

网页设计大作业-基于HTML+PHP的简约耐看的光遇小站页面源码

<项目介绍> 一个简约耐看的光遇小站HTML+PHP页面 自适应手机端和电脑端 把与小伙伴在Sky·光遇这款游戏中的点点滴滴记录下来吧~ - 不懂运行,下载完可以私聊问,可远程教学 该资源内项目源码是个人的毕设,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 --------

.Android安卓科研室.

DNF网吧特权常遇问题.docx

DNF网吧特权常遇问题.docx

ysl102500

Sky光遇机器人光遇攻略插件QQ群机器人插件 - LightCute 5.0.2

光遇攻略插件『LightCute 5.0.2』破茧新生 重大更新,攻略完善,支持QQ频道!! 温暖的灵魂终将相遇 因为热爱光遇,才能坚持开发这款插件 因为热爱光遇,才能坚持每天更新任务 因为热爱光遇,才能源源不断的输出攻略图 插件介绍:本插件是一款光遇攻略插件,为了方便光之子们更方便的查看光遇任务&攻略,支持群聊&频道使用 本插件主要是通过云端同步攻略内容 插件可以让你的机器人拥有以下功能 - 发送国服/国际服每日任务 轻松获取光遇每日任务攻略 - 发送国服/国际服最新复刻内容 轻松知晓本周复刻先祖 - 发送季节名 + 攻略 获取全季攻略 - 光翼、季节入口、节日攻略 实时更新 插件所有攻略都由【光萌攻略小组】夜以继日的更新提供

柒彦彦

【《他乡遇故交》阅读附答案】交警遇难记全文阅读.docx

【《他乡遇故交》阅读附答案】交警遇难记全文阅读.docx

HBXTDSF
评论 5
收藏 已收藏
分享
返回顶部
IT保安
C++ 语言 65,214 成员 250,514 内容