c++ 引用相同变量的多个函数
c++ Multiple functions referring to same variables
我正在通过书中的练习来熟悉用户定义的函数和使用文件。在这个特定的练习中,我将使用我列出的函数分别查找男性和女性学生的平均考试成绩。它们将从现有文件中读取。当我开始编写函数原型时,我有所有这些不同的名称来引用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);
主变量:
ifstream inData;
ofstream outData;
int no_of_females;
int no_of_males;
double maleScoreSum;
double femaleScoreSum;
double maleAverage;
double femaleAverage;
我还注意到,当我按ctrl K并粘贴代码时,我一次只能粘贴一行。感谢您的任何帮助。
就过程编程而言,这种方法很好。您也可以在全局范围内声明并直接访问它们
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);
};
相关文章:
- 未使用的C++未优化的静态成员函数/变量
- 内联函数/变量的外部链接
- 同一函数中的静态函数变量初始化顺序
- 将非静态成员函数C 的使用无效,而将成员功能作为函数变量
- 如何从doxygen输出中排除类的无证件成员函数/变量
- 如何在LUA C API中分配全局LUA函数变量
- 如何将函数变量传递给C lambda函数
- 通过另一个C++函数更改函数变量
- c++11 lambda 真的支持闭包吗?函数变量中存在语义冲突
- C++:静态成员不能在声明时定义,但静态函数变量可以?
- apache-frift是否支持函数变量作为参数
- 类函数/变量在使用之前必须声明
- 函数变量去哪里
- 无法使用函数变量?错误表达式必须具有类类型
- 如何在main中使用函数变量
- 每当尝试打印函数变量时,C++ cout 错误
- 是否存在查看成员函数/变量的整洁等效项
- 访问友元类之间的函数变量
- 函数到函数变量
- 一个定义规则是否强制创建一个静态函数变量