Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Dziedziczenie, klasy pochodne - problem z zadaniem.

Ostatnio zmodyfikowano 2017-06-03 05:13
Autor Wiadomość
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.
P-161961
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.

C/C++
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.
P-161962
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. :/
P-162006
karambaHZP
» 2017-06-03 05:13:59
Zrezygnuj z virtual i sposobu z show2.
P-162010
« 1 »
  Strona 1 z 1