我正在通过书中的练习来熟悉用户定义的函数和处理文件。在这个特定的练习中,我将使用我列出的功能分别找到男女学生的平均考试成绩。它们将从现有文件中读取。当我开始编写函数原型时,我有所有这些不同的名称来引用main中的相同变量。据我所知,该书不鼓励在不同的功能中使用相同的变量。所以,我的问题是,这是过度杀伤,草率还是良好的做法?
更新: 通过引用相同的变量来澄清我的意思' ...
在main中,我有一个名为maleScoreSum的变量,它是一个变量,用于保存男性测试分数的总和。到目前为止,该变量在三个函数中引用。函数初始化中的sumM,下一个函数中的Msum,以及函数中的mSum。这是正确的方法吗?如果所有函数都使用像maleSum这样的函数来引用main中的变量,那会没关系(或更好)吗?我几乎到了本书的结构化编程部分的末尾,并且还没有通过类等等进入OOP部分。此外,到目前为止,没有一个练习程序允许使用全局变量。
原型:
void openFile(ifstream& inDat, ofstream& outDat);
void initialize(int& countF, int& countM, double& sumF, double& sumM, double& avgF, double& avgM);
void sumGrades(ifstream& inDat, double& Fsum, double& Msum);
void averageGrade(int& fCount, double& fSum, int& mCount, double& mSum);
void printResults(int fAvg, int mAvg);
Main中的变量:
ifstream inData;
ofstream outData;
int no_of_females;
int no_of_males;
double maleScoreSum;
double femaleScoreSum;
double maleAverage;
double femaleAverage;
当我点击ctrl K并粘贴代码时,我也注意到我一次只能粘贴一行。谢谢你的帮助。
答案 0 :(得分:0)
在程序编程方面,这种方法很好。 您也可以在全局范围内声明它并直接访问它们
ifstream inData;
ofstream outData;
int no_of_females;
int no_of_males;
double maleScoreSum;
double femaleScoreSum;
double maleAverage;
double femaleAverage;
void openFile(){
inData = ...
}
但C ++为您提供了更方便的工具。例如,您可以使用上下文方法:
struct Context{
ifstream inData;
ofstream outData;
int no_of_females;
int no_of_males;
double maleScoreSum;
double femaleScoreSum;
double maleAverage;
double femaleAverage;
};
void openFile(Context& context);
void initialize(Context& context);
void sumGrades(Context& context);
void averageGrade(Context& context);
void printResults(Context& context);
或使用成员函数
class AverageGrade{
ifstream inData;
ofstream outData;
int no_of_females;
int no_of_males;
double maleScoreSum;
double femaleScoreSum;
double maleAverage;
double femaleAverage;
public:
void openFile();
void initialize();
void sumGrades();
void averageGrade();
void printResults();
};
但是在这一点上你应该弄清楚你班里需要什么数据以及外面的数据。您可以创建更复杂的结构
class Grade{
int numberOfStudents;
double scoreSum;
public:
double calculateAvarage();
};
class GradeParser{
public:
void openFile();
void initialize();
Grades getFemaleGrades();
Grades getMaleGrades();
};
class GradePrinter{
public:
void openFile();
void initialize();
void PrintResults(const Grade& maleGrade, const Grade& femaleGrade);
};