将类用于函数而不是使用常规函数是不好的做法吗?

时间:2015-05-05 04:18:21

标签: c++ function class

我正在编写一个程序,计算期末考试成绩所需的成绩,以达到用户想要的成绩。因此,我使用单个类来获取输入并存储所有分配等级,测试等级等的函数,并使用该信息来确定在最终获得期望等级需要得到什么,考虑到不同的分配和测试权重课程。

我基本上只是使用我的类来调用函数来执行我可能只是使用普通函数逃脱的任务。我只使用一个物体。我想我不清楚的是,何时使用函数以及何时使用类?如果我只有一个对象并且只是使用该类来完成所有繁重的操作以便保持我的主要小,或者我应该将其全部更改为常规函数,这是不是很糟糕?我只是喜欢单独文件的想法,它让事情变得整洁,更容易阅读。

以下是我的类成员函数的哪个部分的示例。

void Grade::setHwGrades() {
   int i = 1;
   std::cout << "What is the weight of Homework assignments? %";
   std::cin >> hwWeight;
   std::cout << "\nHow many Homework assignments did you have? ";
   std::cin >> numHw;

   // inserts each grade entered into vector homeworkGrades
   while (i <= numHw) {
      std::cout << "Homework " << i << " grade: ";
      std::cin >> grade;
      hwGrades.push_back(grade);
      ++i;
   }

   // calculates average grade for all homework assignments
   for (int i = 0; i < numHw; ++i) {
      hwAverage += hwGrades[i];
   }
   hwAverage /= numHw;
   std::cout << "__________________________" << std::endl;
   std::cout << std::setprecision(2) << std::fixed;
   std::cout << "Homework average: " << hwAverage << std::endl << std::endl;
}

构成总成绩的每个组成部分,如测试,测验,项目等,都有自己的向量和获得成绩输入的相同风格。这是一种好的做法还是更好地使用普通功能或其他完全功能?感谢。

2 个答案:

答案 0 :(得分:1)

通常,每当有一些数据(成员变量)和处理该数据的紧密相关的函数(成员函数)时,最好使用一个类。例如,class Square可以有一个成员变量length和一些成员函数,如area()perimeter()set_coordinates(x,y)

当您的功能与您的对象没有紧密联系时,建议您使用非成员函数。在您的情况下,尝试考虑Grade应具有的成员函数(如果有)。如果你不能得到一个满意的答案,这意味着你的设计可能不是最好的,你应该尝试在多个课程中解决你的问题。

一个类的设计应该几乎就像一个函数:它应该只做一件事,做得对。

答案 1 :(得分:0)

对我来说似乎很好。 Class Grade可能有hwGrades作为成员,所以可以将它保存在类中以供以后使用。

如果您的程序稍后应该扩展以处理多个学生,您只需通过为每个学生创建一个实例来重复使用Grade类。

我会将平均计算作为Grade的单独成员函数。这也可能是印刷的情况。

numHw应该是一个局部变量,因为您可以稍后使用hwGrades.size()。

我不知道hwWeight,因为我无法看到它是如何被使用的。

BTW:调用函数时,你确定hwAverage为零吗?也许你应该在计算平均值之前将它设置为零。

也许您还应该在分割前检查numHw是否为零(或更少)。