c ++涉及相同变量的多个函数

时间:2016-02-05 07:52:53

标签: c++ function

我正在通过书中的练习来熟悉用户定义的函数和处理文件。在这个特定的练习中,我将使用我列出的功能分别找到男女学生的平均考试成绩。它们将从现有文件中读取。当我开始编写函数原型时,我有所有这些不同的名称来引用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并粘贴代码时,我也注意到我一次只能粘贴一行。谢谢你的帮助。

1 个答案:

答案 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);
};