2016-03-30 20 views
0

Aşağıdaki iki benzer işleve sahip bir öğrenci sınıfına sahibim: Biri statik ve bir değil.cpp-statik üyesi ve işlevi

int Student::maxGrade = 0; 

int Student::getStudentMaxGrade() 
{ 
    return *max_element(grades.begin(), grades.end()); 
} 

ben statik işlev nasıl emin değilim:

class Student 
{ 
    public: 
     Student(std::string name_ , int const id_); 
     virtual ~Student(); 
     void addGrade(int const grade2add);//grade above 100 
     void removeGrade (int const grade2remove); //update maxGrade 
     void print(); //id, name, grades 
     int getStudentMaxGrade(); 
     static int getMaxGrade(); 

    private: 
     std::string name; //max 20 chars 
     int const id; //5 digits, only digits 
     std::vector<int> grades; 
     float avg; 
     static int maxGrade; 

}; 

static int maxGrade Ben işlevi uygulamak 0.

ile başlatmak olduğunu. Denedim:

int Student::getMaxGrade() 
{ 
    maxGrade= *max_element(grades.begin(), grades.end()); 
    return maxGrade; 
} 

Ama (derleme değil)

+0

'Ststic işlevini nasıl uygulayacağınızdan emin değilim. Bu, ne yapmak istediğinize bağlı değildir, bu da asla yeterince açıklanmadı. Statik bir öğenin belirli bir nesneye bağlı olmadığını hatırlayın (bu statikin tüm noktasıdır). Başka bir deyişle, herhangi bir bireysel öğrenciye atıfta bulunamaz. –

+0

@Igor, bunun bir nesnenin belirli bir örneğine bağlı olmadığını kastediyorsunuz. Belli bir nesneye, yani “Öğrenci” ye bağlıdır. – Chiel

+1

@Chiel 'Öğrenci 'bir sınıf değil, bir nesnedir. Eğer Öğrenci s 'varsa, 's' bir nesnedir; Öğrenci değil. –

cevap

1

size veri ortaya koydum yolu çalışmıyor, her öğrenci diğer öğrencilerin notları hakkında hiçbir şey bilmeyen ve sınıf herhangi bir öğrencinin notları hakkında hiçbir şey bilmiyor. Bu, iyi bir kapsüllemedir, ancak tüm öğrencilerin maksimum derecesini almak için, girilen maksimum notu takip etmek için biraz mantık eklemeniz gerekir. Böyle bir şey: her öğrencinin en

void Student::addGrade (int const grade) { 

    // do the stuff, add the grade 

    if (grade > maxGrade) // Check if the grade is higher than the previous 
     maxGrade = grade; // highest recorded grade and, if so, overwrite it. 
} 

Bu şekilde, daha yüksek bir notu girdidir her zaman, yeni yüksek notu haline gelir ve bu şekilde sınıf daima her takip etmek zorunda kalmadan yüksek notu bilir ve sınıflarda.

+0

Nasıl 'removeGrade'? @ sara8 İhtiyacınız olan şey '' maxGrade' ise, farklı bir tasarıma ihtiyacınız var. Öğrencileri bir kapsayıcıya sahip olan farklı bir sınıfa öğrenci eklemeyi düşünün. – ZDF

İlgili konular