• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Jak odziedziczyć klasę z zachowaniem publicznych i prywatnych metod

Aruba Cloud PRO i VPS, Openstack, VMWare, MS Hyper-V
0 głosów
99 wizyt
pytanie zadane 23 kwietnia 2020 w C i C++ przez Jakub Michalik Użytkownik (850 p.)

Jak odziedziczyć klasę z zachowaniem takich samych możliwości dostępu.

Chodzi mi o to w jaki sposób można odziedziczyć z klasy funkcje tak aby jedna w klasie potomnej miała Private dla klasy potomnej a druga miała Public dla klasy potomnej. Dla przykładu metoda getNazwa() chcę żeby mogła być wywoływana w funkcji main() a już metoda getID() chcę żeby była prywatna dla klasy Patyk a dla funkcji main() w ogóle nie wykrywalna.

Da się to jakoś zrobić?

#include <iostream>

using namespace std;

class Item
{
    // Zmienne
protected:
    string nazwa;
    int wytrzymalosc;
    int obrazenia;
    int ID_Itemu;
private:
    int ID; /* UNIKALNY */

    // Metody
public:
    Item() : wytrzymalosc(-1), obrazenia(1)
    {
        cout << "Nowy przedmiot!" << endl;
    }
    Item(string n) : nazwa(n)
    {
        cout << "Nowy przedmiot!" << endl;
    }
    string getNazwa()
    {
        return nazwa;
    }
    int getWytrzymalosc()
    {
        return wytrzymalosc;
    }
    int getObrazenia()
    {
        return obrazenia;
    }
    int getID_Itemu()
    {
        return ID_Itemu;
    }
    int getID()
    {
        return ID;
    }
};

class Patyk : private Item
{
    // Metody
public:
    Patyk() : Item()
    {
        ID_Itemu = 3;
        cout << "Nowy patyk!" << endl;
    }

    Patyk(string name) : Item(name)
    {
        ID_Itemu = 3;
        cout << "Nowy patyk!" << endl;
    }

    ~Patyk()
    {
        cout << "Patyk zostal usuniety!" << endl;
    }
};

int main()
{
    Patyk p1("Patyk");
    p1.getNazwa();

    return 0;
}

 

1 odpowiedź

0 głosów
odpowiedź 23 kwietnia 2020 przez Bondrusiek Maniak (61,370 p.)
wybrane 23 kwietnia 2020 przez Jakub Michalik
 
Najlepsza
Witam,

z tego co pamiętam jeśli w klasie bazowej jakaś zmienna/funkcja ma dostęp private to nie da się do nich odwołać w klasach pochodnych.

Polecam Ci dodać const do zmiennej ID tak aby nie można było zmienić podanej wartości oraz zmienienie zakresu na protected.

Więcej o zakresach:

https://pl.wikibooks.org/wiki/C%2B%2B/Dziedziczenie
komentarz 23 kwietnia 2020 przez j23 Mędrzec (193,580 p.)

Zamiast dodawać const do zmiennej ID, lepiej niech doda go do gettera getID (i do pozostałych też).

Podobne pytania

0 głosów
1 odpowiedź 160 wizyt
0 głosów
1 odpowiedź 218 wizyt
pytanie zadane 25 kwietnia 2021 w Bezpieczeństwo, hacking przez MrMoon Użytkownik (960 p.)
0 głosów
1 odpowiedź 112 wizyt
pytanie zadane 29 listopada 2020 w C i C++ przez jakis111 Nowicjusz (210 p.)

91,847 zapytań

140,523 odpowiedzi

317,029 komentarzy

61,170 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...