【问题标题】:When to use OOP instead of Arrays何时使用 OOP 而不是数组
【发布时间】:2009-10-10 03:57:19
【问题描述】:

什么时候应该使用 OOP 而不是数组?我的项目大小重要吗?

提供一点背景知识:我正在为我的朋友制作一个小程序。基本上,他想将不同的分数相加,以便能够看到他的成绩。 (是的,我知道有商业软件,但这也是一个有趣的练习。)无论如何,他可能不时希望程序重新计算所有分数,所以我必须阅读以前的条目。我是更熟悉数组,所以我打算使用它们,但 OOP 可能是一个同样好的工具。那么,基本上,我应该什么时候使用 OOP?

【问题讨论】:

  • 这个比较是无关紧要的。
  • 我认为提问者的意思是:何时将数据存储在对象而不是数组中?
  • 你的意思是 std::vector 和其他容器 vs. 数组吗?

标签: c++ arrays oop


【解决方案1】:

嗯...苹果 (array) 与橙色 (OOP = Object Oriented Programming)

【讨论】:

    【解决方案2】:

    数组可以在OOP中使用,所以您似乎在混淆概念。

    如果您觉得使用赋值类会对您有所帮助,那么您可以轻松地使用它来为您的程序建模,但如果您只想使用 C 并使用静态数组,那也可以。

    基本上,决定您希望如何为您的应用程序建模,然后,在大多数语言中,您可以使用数组,如果您觉得这样最好的话。

    但是,如果您有未知数量的分数,请将它们放入一个列表中。当您想将它们加在一起时,如果您愿意,可以将列表转换为数组,但如果您只是经常将它们加起来,我看不出会有什么好处。

    【讨论】:

      【解决方案3】:

      同意其他人的观点,数组和 OOP 是两个不同且重叠的概念。这就像说,“我今天应该怎么去上班?准时,还是开车?”你可以两者都做/两者都做/都不做,它们是两件不同的事情。

      假设您在程序中有一个人(您的朋友)具有一组分数,并且您将所有分数相加以找到一个等级,那么只需使用“数组”(列表、序列、向量等)

      C++:

      vector<float> myScores;
      myScores.push_back(100.0);
      myScores.push_back(50.5);
      myScores.push_back(10.0);
      float calcGrade(vector<float> scores) {
          float grade = 0;
          for (unsigned int i=0; i<scores.size(); i++) {
              grade += scores[i];
          }
          return grade / scores.size();
      }
      calcGrade(myScores)
      

      Python:

      scores = []
      scores.append(100.0)
      scores.append(50.5)
      scores.append(10.0)
      def calcGrade(scores):
          grade = 0
          for i in scores:
              grade += i
          return grade / len(scores)
      calcGrade(scores)
      

      但是,如果您的程序中有多个具有多个分数的人,那么您应该考虑使用更好的结构来保存数据。你可以做更多的OOP方法

      class Person {
          vector<float> scores;
          float calcGrade();
      }
      

      或者只是简单地使用多维数组。但此时,您的程序中可能需要一些“OOP”。

      【讨论】:

        【解决方案4】:

        如果 jimyi 是正确的,你是在问哪个更好?

        class grades
        {
           public:
              int grade1;
              int grade2;
        };
        

        int grades[2];
        

        两者都没有……你最好使用 int 的向量。

        【讨论】:

          【解决方案5】:

          这家伙问的是联想技巧。是使用聚合还是继承。我建议您参考Association (object-oriented programming)。然后你可以根据你的架构设计来决定。

          【讨论】:

            【解决方案6】:

            比起手写循环,我更喜欢标准函数:

            #include <numeric>
            float sum = std::accumulate(scores.begin(), scores.end(), 0.0f);
            float average = sum / scores.size();
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2023-03-17
              • 2012-01-13
              • 2021-06-30
              • 2011-04-22
              • 1970-01-01
              • 1970-01-01
              • 2017-01-25
              相关资源
              最近更新 更多