• 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

VPS Starter Arubacloud
0 głosów
109 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 (194,920 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ź 170 wizyt
0 głosów
1 odpowiedź 308 wizyt
pytanie zadane 25 kwietnia 2021 w Bezpieczeństwo, hacking przez MrMoon Użytkownik (960 p.)
0 głosów
1 odpowiedź 124 wizyt
pytanie zadane 29 listopada 2020 w C i C++ przez jakis111 Nowicjusz (210 p.)

92,454 zapytań

141,262 odpowiedzi

319,089 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

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

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...