Dziedziczenie, klasy pochodne - problem z zadaniem.
Ostatnio zmodyfikowano 2017-06-03 05:13
Kiarcia Temat założony przez niniejszego użytkownika |
Dziedziczenie, klasy pochodne - problem z zadaniem. » 2017-06-02 00:09:53 Witam,
mam pewien problem z programem. Mianowicie mam do zrobienia klasę podstawową Pojazd oraz dwie plasy pochodne Auto i Rower. Wszystko było by pięknie gdyby nie to, że wszelkie dane które są do wpisania mają znajdować się (według układu UML) w private klasy Pojazd, czego wynikiem jest fakt iż klasy pochodne nie mają do tych danych dostępu, a muszę. Jest jakiś sposób aby rozwiązać ten problem ? Dokładna treść zadania:
Zadanie: ● stwórz klasę podstawową Pojazd oraz dwie klasy pochodne Auto oraz Rower ● klasy te powinny zawierać metodę pokaz_dane() (przesłonięcie) ● utwórz w programie egzemplarze klas Auto oraz Rower, a następnie przypisz ich składnikom danych wartości pobrane z klawiatury
Zadaniem programu jest wyświetlenie danych przechowywanych w stworzonych egzemplarzach klas Auto oraz Rower (przesłonięcie metody pokaz_dane()).
Z góry bardzo dziękuję za każdy pomysł na rozwiązanie mojego problemu. Dodam jeszcze, iż nie wolno mi robić żadnych dodatkowych funkcji niż metoda pokaz_dane(), co jest strasznym utrudnieniem. |
|
karambaHZP |
» 2017-06-02 05:20:56 Wszystko było by pięknie gdyby nie to, że wszelkie dane które są do wpisania mają znajdować się (według układu UML) w private klasy Pojazd, czego wynikiem jest fakt iż klasy pochodne nie mają do tych danych dostępu, a muszę. Jest jakiś sposób aby rozwiązać ten problem ? |
Użyj konstruktora klasy bazowej w liście inicjalizacyjnej klas pochodnych. Z treści wynika, że potrzebujesz tylko metody pokazującej zawartość pól. class A { int a; public: A( int n ) : a { n } { } virtual void show() const { cout << "A::a: " << a << '\n'; } virtual void show2() const { cout << "A::a: " << a << '\n'; } virtual ~A() { } };
class B : public A { int b; public: B( int a, int n ) : A( a ) , b { n } { } virtual void show() const { A::show(); cout << "B::b: " << b << '\n'; } virtual ~B() { } };
int main() { int n, n2; cin >> n >> n2; B b { n, n2 }; b.show(); b.show2(); }
Swoją drogą trochę bez sensu jest ukrywanie w polach prywatnych dane klasy bazowej. Poziom dostępu protected będzie wygodniejszy. |
|
Kiarcia Temat założony przez niniejszego użytkownika |
» 2017-06-02 23:30:10 Dziękuje za odpowiedz. :) Wszystko fajnie, ale nie mogę mieć żadnych dodatkowych (nawet wirtualnych) funkcji poza funkcją void pokaz_dane() w public. :/ |
|
karambaHZP |
» 2017-06-03 05:13:59 Zrezygnuj z virtual i sposobu z show2. |
|
« 1 » |