Funkcja zaprzyjaźniona nie modyfikuje składowej klasy

0

Tak jak w temacie,pole ocena zostaje niezmienione po wywołaniu funkcji dajOcene(...),niezależnie od tego czy zostało zainicjowane w konstruktorze czy nie.
Zmiana oceny setterem działa ale mam użyć funkcję zaprzyjaźnioną.

Zapewne deklaracja/definicja tej funkcji jest zła,ale nie rozumiem dlaczego tak się dzieje.

Student.h

#include "Osoba.h"

class Student : public Osoba{
private:
    double ocena;
public:
    friend void dajOcene(Student st,double oc);

//inne metody
};

plik Test.cpp

#include "Student.h"
// includy
int main(){
    
    Student st("Czubek");
    dajOcene(st,5.0);
    cout<<endl<<"Ocena "<<st.getOcena();

    //obiekty innych klas i operacje na nich
};

void dajOcene(Student st,double oc)
{
    st.ocena=oc;
}
1

Przekazujesz Studenta przez wartość, oryginał oczywiście się nie zmienia.

1

Zamiast frienda lepsza byłaby jednak metoda klasy Student.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.