Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

C++ - Dziedziczenie i lista inicjalizacyjna

TheSevcio 25 Maj 2016 12:34 945 5
  • #1 25 Maj 2016 12:34
    TheSevcio
    Poziom 8  

    Witam. Mam problem z programem, w którym. Klasa B, ma dziedziczyć z klasy A, klasa C, ma dziedziczyć z klasy B, a klasa D, ma dziedziczyć z klasy A. I mam problem z listą inicjalizacyjną. Klasa C, ma wysłać do klasy B, wartość 5, a klasa B to wyświetlić. No prosta rzecz. Ale czemu to nie chce działać? Mam wrażenie, że te dziedziczenie coś tutaj psuje.

    Kod: c
    Zaloguj się, aby zobaczyć kod

    0 5
  • #3 25 Maj 2016 20:18
    kuba1im
    Poziom 19  

    "Z w b wynosi" ale ile wynosi to już nie wyświetlasz.

    A jakie są objawy niedziałania programu?

    Przed return 0; dodaj system("pause");
    Wtedy okno konsoli nie będzie znikać zaraz po uruchomieniu programu.

    0
  • Pomocny post
    #4 25 Maj 2016 20:45
    JacekCz
    Poziom 36  

    Dziedziczenie a zawieranie to dwie różne sprawy. Tu używasz obu co naturalne nie jest (nie jest to zakazane formalnie, ale nie naturalne).
    Twoja proba naprawienia ???? przez zawieranie budzi moje wątpliwości

    Ze względu na brak poprawnego zainicjowania B w C powinieneś mieć błąd kompilacji więc nie powinien drukować drukuje niczego.

    W moim przykładzie usunąłem zawieranie i przerobiłem wywołanie konstruktora klasy rodzicielskiej.

    Oczywiście zmienia to sens kodu, ale się uczymy

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Raczej oszczędnie z publicznymi składowymi ( A . x ), można, ale do przemyślenia

    B dziedziczące z A konstruktor trzeba rozumieć tak:

    Kod: c
    Zaloguj się, aby zobaczyć kod

    0
  • #5 29 Maj 2016 09:35
    TheSevcio
    Poziom 8  

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Wartości w klasie A, muszę być publiczne, aby B mogło je wywołać. Czy da się ustawić je na prywatne?

    0
  • Pomocny post
    #6 29 Maj 2016 09:43
    JacekCz
    Poziom 36  

    TheSevcio napisał:


    Wartości w klasie A, muszę być publiczne, aby B mogło je wywołać. Czy da się ustawić je na prywatne?


    W programowaniu obiektowym tok myślenia jest taki, że klasy udostępniają funkcjonalność a nie wartości. Mają mieć klarowną separację: która czym jest (i co robi). Jest w pełni możliwe że coś z klasy odziedziczy i udostępni tę samą funkcjonalność na podstawie innych danych (poczytać: metody wirtualne).

    Tu jest pewnego rodzaju ćwiczonko jak-to-działa, więc odejście od zasad np dla wyświetlenie wartości, jest do wybaczenia.

    A jakbyś chciał np odczytać wartość (klasa sama w sobie może ustawiać, inni tylko czytać) to się implementuje publiczny geter.

    Kod: c
    Zaloguj się, aby zobaczyć kod

    0