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:

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?

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).

0

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

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;
} 
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.

1 użytkowników online, w tym zalogowanych: 0, gości: 1