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 » |