problem z dziedziczeniem

problem z dziedziczeniem
0

Mam problem z zrozumieniem idei dziedziczenia, tzn.: napisałam coś i moim zdaniem powinno to działać, ale nie chce. Więc napisałam drugi, prostszy program,. ale on też nie działa:

Kopiuj
class osoba
{
    protected:
        int wiek;
};

class rodzina: public osoba
{
    private:
        osoba mama;
        osoba tata;
        osoba dziecko;
    public:
        float sredni_wiek ();         
};

float rodzina::sredni_wiek ()
{
    return (mama. wiek + tata. wiek + dziecko. wiek)/3;
} 

W odpowiedzi dostaję, że "'int osoba::wiek' is protected", ale skoro te klasy po sobie dziedziczą to nie powinno to być widoczne?

byku_guzio
  • Rejestracja:prawie 15 lat
  • Ostatnio:około 7 lat
0

Rzeczywiście nie rozumiesz idei dziedziczenia. Dziedziczenie to relacja is, jest typu. Od kiedy to rodzina jest typem, szczególnym przypadkiem osoby?
Błąd pojawia się, bo próbujesz dobrać się do składowych klasy osoba z poziomu klasy rodzina i to nie tych, które dziedziczysz.

W tym swoim kodzie łączysz dwa typy relacji co jest totalnie bez sensu: zarówno dziedziczenie jak i kompozycję(zawieranie). W tym przypadku powinna być tu tylko i wyłącznie kompozycja, ewentualnie agregacja(jeżeli rodzina nie musi się składać z wszystkich tych osób).


edytowany 1x, ostatnio: byku_guzio
Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:około 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
0

Domyślam się że dziedziczysz tylko po to żeby niecnie uzyskać dostęp do pól klasy osoba?

Kopiuj
class Person
{
    private:
        int age;
    public:
      Person(int a):age(a){}
      int getAge(){
        return age;
      }
};
 
class Family:
{
    private:
        Person mama;
        Person tata;
        Person dziecko;
    public:
        Family(int m, int t, int d):mama(m),tata(ta),dziecko(d){}
        float getAverageAge();
};
 
float Family::getAverageAge()
{
    return (mama.getAge() + tata.getAge() + dziecko.getAge())/3.0;
} 

"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
Azarien
  • Rejestracja:ponad 21 lat
  • Ostatnio:4 minuty
0

Dziedziczenie służy do tego, żeby jeden typ był „szczególnym przypadkiem” drugiego. Na przykład kobieta i mezczyzna mogą dziedziczyć po osoba (przemilczmy może, jakie mogłyby mieć pola prywatne).
Ale rodzina to już nie jest szczególny rodzaj osoby, tylko grupa osób.

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.