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

question-closed Konstruktor kopiujący w klasie pochodnej klasy abstrakcyjnej

VPS Starter Arubacloud
+1 głos
540 wizyt
pytanie zadane 15 listopada 2016 w C i C++ przez Kasztan Dyskutant (8,080 p.)
zamknięte 17 listopada 2016 przez Kasztan
class abstr
{
private:
	string fname;
	string lname;
	string job;
public:
	abstr() : fname("Brak"), lname("Brak"), job("Brak") {}
	abstr(const string & fn, const string & ln, const string & j) : fname(fn), lname(ln), job(j) {}
	virtual void ShowAll() const;
	virtual void SetAll();
	friend ostream & operator<<(ostream & os, const abstr & e); // wyswietla imie i nazwisko
	virtual ~abstr() = 0 {}
};

class manager : virtual public abstr {
private:
	int inchargeof;
protected:
	int InChargeOf() const { return inchargeof; }
	int & InChargeOf() { return inchargeof; }
public:
	manager() : abstr() {}
	manager(const string & fn, const string & ln, const string & j, int ico = 0) : abstr(fn, ln, j), inchargeof(ico) {}
	manager(const abstr & e, int ico) : abstr(e), inchargeof(ico) {}
	manager(const manager & m); // ten konstruktor
	virtual void ShowAll() const;
	virtual void SetAll();
};

Moje pytanie jak będzie wyglądała definicja tego konstruktora jak mam się dostawać do składowych klasy wirtualnej ?

manager(const manager & m);

 

 

komentarz zamknięcia: Uzyskałem odpowiedź

3 odpowiedzi

0 głosów
odpowiedź 16 listopada 2016 przez criss Mędrzec (172,590 p.)
wybrane 17 listopada 2016 przez Kasztan
 
Najlepsza

Ale po co chcesz się dostawać do składowych "klasy wirtualnej" (w cudzysłowie bo raczej właściwsze by było "wirtualnego rodzica" czy coś takiego) ? Są prywatne, więc to niemożliwe. Druga sprawa, że w konstruktorze to raczej niepotrzebne.

Powinien wyglądać tak:

manager(const manager & m) : abstr(m), inchargeof(m.inchargeof) {}

Btw. po co to =0 przy destruktorze?

0 głosów
odpowiedź 15 listopada 2016 przez Ehlert Ekspert (212,630 p.)
  1. Zrób gettery w klasie abstrakcyjnej
  2. = 0 to oznacz że niema ciała, więc je wywal
  3. Abstrakcyjna ma jeden konstruktor za dużo. Zrób jeden z argumentami defaultowymi.
komentarz 15 listopada 2016 przez Kasztan Dyskutant (8,080 p.)
A da się inaczej ? bez tych getterów ?
komentarz 15 listopada 2016 przez adrian17 Ekspert (344,100 p.)

= 0 to oznacz że niema ciała, więc je wywal

Nie tylko może mieć ciało, ale w przypadku destruktora klasy bazowej wręcz musi mieć ciało, nawet, jeśli jest oznaczony jako metoda abstrakcyjna.

(plus to, jak jest zdefiniowany, technicznie nie jest legalne - GCC i Clang by nie przepuściło "=0 {}". Definicja powinna być osobno.)

komentarz 16 listopada 2016 przez criss Mędrzec (172,590 p.)

= 0 to oznacz że niema ciała, więc je wywal

Tak jak napisał adrian.

= 0 wymusza implementacje w klasie dziedziczącej, ale to nie oznacza, że taka metoda nie może mieć ciała w klasie bazowej. 

0 głosów
odpowiedź 15 listopada 2016 przez Kasztan Dyskutant (8,080 p.)
I jak mam użyć tych getterów w definicji tego konstruktora ? Getter będzie mi zwracał składową i jak mam ją przypisać do drugiego obiektu ?

Mam zrobić listę inizjalizacyjną i w konstruktorze klasy abstr wywoływać gettery po przecinku ??
komentarz 16 listopada 2016 przez Kasztan Dyskutant (8,080 p.)
Podpowie ktoś jak to zrobić ?
komentarz 16 listopada 2016 przez Kasztan Dyskutant (8,080 p.)
?????

Podobne pytania

0 głosów
1 odpowiedź 420 wizyt
pytanie zadane 28 kwietnia 2018 w C i C++ przez konu33 Nowicjusz (210 p.)
–1 głos
1 odpowiedź 787 wizyt
0 głosów
2 odpowiedzi 676 wizyt

92,453 zapytań

141,262 odpowiedzi

319,088 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!

...