2016-02-05 227 views
0

我正在通过书中的练习来熟悉用户定义的函数和使用文件。在这个特别的练习中,我将使用我列出的功能分别查找男女学生的平均测试分数。他们将从现有文件中读取。当我开始编写函数原型时,我有所有这些不同的名称来引用main中的相同变量。据我所知,这本书不鼓励在不同的功能中使用相同的变量。所以,我的问题是,这是过度杀伤,草率或良好的做法?C++多个函数引用相同的变量

UPDATE: 为了澄清我所说的“引用相同的变量”的意思是......

在主要我有一个名为maleScoreSum变量,它是保持男性测试得分的总和的变量。到目前为止,这个变量在三个函数中被引用。它是函数initialize中的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

我添加了更新。不确定是否通过编辑或评论回复。再次感谢您的帮助 –

回答

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 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); 
}; 
+0

我添加了更新。不确定是否通过编辑或评论回复。再次感谢任何帮助 –