2009-10-10 79 views
0

何时应该使用OOP而不是数组?我的项目的规模是否重要?何时使用OOP而不是阵列

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

+3

这种比较是不相关的。 – 2009-10-10 04:08:37

+1

我认为提问者的意思是:何时将数据存储在对象而不是数组中? – jimyi 2009-10-10 04:58:56

+0

你的意思是std :: vector和其他容器与数组? – Steve314 2009-10-10 07:13:06

回答

2

与其他人一致,数组和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) 

但是,如果您有多个在人多的分数你的程序,那么你应该考虑使用更好的结构来保持数据。你可以做更多的面向对象的方法

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

或只是简单的多维数组。但是在那个时候,你的程序中可能需要一些“OOP”。

4

数组可以用在OOP中,所以看起来你很混淆概念。

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

基本上,决定你想如何建模你的应用程序,然后,在大多数语言中你可以使用数组,如果你觉得最好。

但是,如果你有一个未知的分数,然后把它们放到一个列表中。当你想把它们加在一起时,如果你愿意的话,把列表转换成一个数组,但是如果你只是频繁地加入它们,我就不会看到会给你买什么。

1

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

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

int grades[2]; 

没有...你最好使用int的载体。

0

我喜欢的标准功能,手写循环:

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