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

Dziedziczenie

Object Storage Arubacloud
0 głosów
343 wizyt
pytanie zadane 17 marca 2016 w C i C++ przez vanowikv13 Bywalec (2,740 p.)
edycja 17 marca 2016 przez vanowikv13
Czy można dziedziczyć z 2 klas na raz ?

np.mamy 2 klasy i chcemy żeby klasa dowód dziedziczył z klasy pesel i nazwisko np. publicznie czy to jest możliwe ?

3 odpowiedzi

+2 głosów
odpowiedź 17 marca 2016 przez Sebastian Fojcik Nałogowiec (43,040 p.)
 
Najlepsza

W C++ można:

class Rodzic1
{

};

class Rodzic2
{

};

class Dziedzic : public Rodzic1, public Rodzic2
{

};

Oddzielasz przecinkiem i przed każdą klasą, z której dziedziczysz, piszesz czy dziedziczysz publicznie, prywatnie czy protected. Jak nie napiszesz nic, to przez domniemanie będziesz dziedziczył prywatnie.

W C# i Java (w pełni obiektowych językach) nie można dziedziczyć z kilku obiektów na raz. Ciesz się z tych udogodnień teraz. Doceń je :-)

komentarz 17 marca 2016 przez vanowikv13 Bywalec (2,740 p.)
dzięki działa :)
komentarz 17 marca 2016 przez Boshi VIP (100,240 p.)
To nie są udogodnienia, można szybko, bardzo bardzo szybko stracić  orientację, można z tego korzystać, ale trzeba umieć.
komentarz 18 marca 2016 przez Sebastian Fojcik Nałogowiec (43,040 p.)
edycja 18 marca 2016 przez Sebastian Fojcik

Z punktu widzenia innych języków, w C++ są to udogodnienia.

Nie jest to jednak niezbędne i świadczy o tym chyba najlepiej fakt, że takiego złożonego dziedziczenia nie ma w innych, wysokopoziomowych językach programowania. 

Z tym, że trzeba umieć, to masz rację. Jedyne sensowne użycie dziedziczenia z dwóch klas jakie widziałem, to chyba w bibliotece standardowej , gdzie mamy klasę iostream, dziedziczącą od istream i ostream. ;-)

+3 głosów
odpowiedź 17 marca 2016 przez notabigthreat Mądrala (7,060 p.)

np.mamy 2 klasy i chcemy żeby klasa dowód dziedziczył z klasy pesel i nazwisko np. publicznie czy to jest możliwe ?

Czy na pewno wiesz, co chcesz zrobić? Takie dziedziczenie (według standardowej interpretacji)  oznacza, że dowód jest peselem, jak i jest nazwiskiem. Pewnie chciałeś przechowywać PESEL oraz nazwisko jako właściwości (zmienne w klasie), czyli: dowód zawiera pesel oraz nazwisko.

komentarz 18 marca 2016 przez Sebastian Fojcik Nałogowiec (43,040 p.)

Zdecydowanie popieram!

Dziedziczenie, które zostało przedstawione jako przykład przez autora jest błędne już z samego założenia "po co się dziedziczy".

Aczkolwiek nie pisałbym, że klasa Dowód zawiera w sobie tylko obiekty (zmienne w klasie) typu Pesel i Nazwisko dlatego, że nie powinien istnieć samotny obiekt Pesel lub Nazwisko poza klasą. W takim przypadku definicje tych klas zagnieżdżamy w definicji Dowód. Jest to, wbrew pozorom, bardzo popularna praktyka swego rodzaju "hermetyzacji".

Niżej zamieszczam przykład. Niestety są pewne utrudnienia z tym związane. Między innymi takie, że do napisania poprawnej definicji obiektu kompilator potrzebuje już znać definicję klasy. Wobec czego dochodzi do takiej nieprzyjemnej sytuacji, kiedy składniki prywatne są nad publicznymi (niezgodne z konwencją pisania kodu)

class Dowód
{
private:
	class Nazwisko
	{

	};
	class Pesel
	{

	};
public:
	Nazwisko naz;
	Pesel pes;
};

I nie ma rady na taki zapis. Mógłbyś też umieścić definicje klas zagnieżdżonych w klauzuli dostępu public, ale to było sprzeczne z założeniem :D
W C++ byłoby wtedy możliwe stworzenie obiektu klasy zagnieżdżonej z pominięciem klasy podstawowej. (W Javie takie zachowanie jest niedozwolone)

Gdyby Nazwisko i Pesel były wewnątrz public, to w main() mógłbyś zapisać coś takiego:

Dowód::Nazwisko nazwisko;

herezja :-D

komentarz 18 marca 2016 przez notabigthreat Mądrala (7,060 p.)
Nie ma po co zakładać, że nigdy nie będziemy pracować jedynie na peslu zamiast pełnego dowodu.
Od nazwisk to w sumie klasy nie trzeba – mamy stringi, wstringi… , a ten pesel to zwykła liczba z ograniczeniami.
komentarz 18 marca 2016 przez Sebastian Fojcik Nałogowiec (43,040 p.)
To oczywiste, ale autor posta wyodrębnił pesel i nazwisko do osobnych klas. Toteż pokazałem czym należy zastąpić dziedziczenie, które nieszczęśliwie starał się zaimplementować :-P
+1 głos
odpowiedź 17 marca 2016 przez niezalogowany

Czy można dziedziczyć z 2 obiektów na raz ?

Tak (jeżeli pod obiektami rozumiesz klasy)

komentarz 17 marca 2016 przez vanowikv13 Bywalec (2,740 p.)
tak chodziło mi o klasy a jak to zrobić ?

poprawiona :)
komentarz 17 marca 2016 przez niezalogowany
W tym momencie zamiast pytać to sam powinieneś poszukać takiej informacji w internecie:

http://cpp0x.pl/kursy/Programowanie-obiektowe-C++/Polimorfizm/Dziedziczenie-wielobazowe/509
komentarz 17 marca 2016 przez vanowikv13 Bywalec (2,740 p.)
szukałem ale nie znalazłem :(
komentarz 17 marca 2016 przez niezalogowany
ja szukałem może 20s

Podobne pytania

0 głosów
1 odpowiedź 194 wizyt
pytanie zadane 11 grudnia 2019 w C i C++ przez Jacuchna0 Użytkownik (640 p.)
0 głosów
1 odpowiedź 561 wizyt
pytanie zadane 15 marca 2019 w C i C++ przez Drax Użytkownik (630 p.)
0 głosów
1 odpowiedź 391 wizyt
pytanie zadane 11 czerwca 2018 w C i C++ przez szymek2807 Nowicjusz (150 p.)

92,580 zapytań

141,433 odpowiedzi

319,665 komentarzy

61,965 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

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy 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!

...