-
Data: 2012-07-06 11:10:35
Temat: Re: Co może robić konstruktor i dlaczego nie?
Od: Andrzej Jarzabek <a...@g...com> szukaj wiadomości tego autora
[ pokaż wszystkie nagłówki ]On Jul 5, 4:24 pm, "slawek" <h...@s...pl> wrote:
> Użytkownik "Andrzej Jarzabek" napisał w wiadomości grup
> dyskusyjnych:7a3451d2-b497-461a-8a6e-b79d7ffda...@a1
6g2000vby.googlegroups.com...
>
> >Pewną dość oczywistą wadą 'uruchomienia przez konstruktor' jest brak
> >możliwości sensownego dziedziczenia po takiej klasie. W C++ dodatkowo
> >w takich przypadkach występuje problem z wywoływaniem funkcji
> >wirtualnych z konstruktora.
>
> Ale przecież konstruktor tej klasy może być sparametryzowany i jednocześnie
> domyślny konstruktor może być pusty. No problem.
Problem jest taki, że jeśli w klasie potomnej w konstruktorze wywołasz
ów pusty konstruktor, to tracisz dostęp do swojego 'run' - nie
skonstruujesz klasy bazowej dwa razy.
> Chyba vtable jest już wypełniona przed wejściem w blok {} konstruktora? Bo i
> niby czemu nie miałaby być?!
Powody mogłyby być, natomiast np. w C++ będzie to vtable dla aktualnie
konstruowanej klasy, a nie dla końcowego typu obiektu, który jest
konstruowany. Czyli jeśli masz klasę B, która wywołuje swój 'run' w
konstruktorze, tworzysz dziedziczącą po niej klasę D, która nadpisuje
funkcje wirtualne klasy B, to wywołania tych funkcji w 'run' nadal
wywołują funkcje zdediniowane dla B, nie te dla D. Nie mówiąc już o
pięknej okazji do wprowadzenia UB jeśli klasa jest abstrakcyjna.
W Javie jest inaczej, ale niekoniecznie lepiej: cała klasa
inicjalizowana jest przed konstrukcją i metody są wywoływane dla
ostatecznego typu, ale to znaczy, że trzeba przewidzieć
'nieskonstruowany' stan klasy: nie możesz np. założyć, że jakas
referencja jest nie-null, jeśli ustawiasz jej wartość w konstruktorze.
Następne wpisy z tego wątku
- 06.07.12 12:59 Paweł Kierski
- 06.07.12 13:27 Jacek
- 06.07.12 13:50 Edek Pienkowski
- 06.07.12 13:42 AK
- 06.07.12 15:08 Paweł Kierski
- 06.07.12 15:24 AK
- 06.07.12 15:36 slawek
- 06.07.12 16:01 slawek
- 06.07.12 16:13 AK
- 06.07.12 16:33 Edek Pienkowski
- 06.07.12 19:11 Bogusław Szczepanowski
- 06.07.12 19:20 AK
- 06.07.12 20:38 slawek
- 06.07.12 20:55 Edek Pienkowski
- 07.07.12 10:54 Bogusław Szczepanowski
Najnowsze wątki z tej grupy
- Popr. 14. Nauka i Praca Programisty C++ w III Rzeczy (pospolitej)
- Arch. Prog. Nieuprzywilejowanych w pełnej wer. na nowej s. WWW energokod.pl
- 7. Raport Totaliztyczny: Sprawa Qt Group wer. 424
- TCL - problem z escape ostatniego \ w nawiasach {}
- Nauka i Praca Programisty C++ w III Rzeczy (pospolitej)
- testy-wyd-sort - Podsumowanie
- Tworzenie Programów Nieuprzywilejowanych Opartych Na Wtyczkach
- Do czego nadaje się QDockWidget z bibl. Qt?
- Bibl. Qt jest sztucznie ograniczona - jest nieprzydatna do celów komercyjnych
- Co sciaga kretynow
- AEiC 2024 - Ada-Europe conference - Deadlines Approaching
- Jakie są dobre zasady programowania programów opartych na wtyczkach?
- sprawdzanie słów kluczowych dot. zła
- Re: W czym sie teraz pisze programy??
- Re: (PDF) Surgical Pathology of Non-neoplastic Gastrointestinal Diseases by Lizhi Zhang
Najnowsze wątki
- 2025-02-07 Jaki silikon lub może klej?
- 2025-02-07 Gdańsk => iOS Developer (Swift experience) <=
- 2025-02-07 Warszawa => Starszy Programista C <=
- 2025-02-07 Niby to nie sąd ale kooorwa tak to w sądach dziś wygląda?
- 2025-02-06 PROGRAM DOPŁAT DO AUT ELEKTRYCZNYCH TO ABSURD. ZA ŚRODKI Z KPO KUPIMY NIEMIECKIE I CHIŃSKIE AUTA
- 2025-02-05 ceny OC
- 2025-02-05 Re: ceny OC
- 2025-02-05 Re: ceny OC
- 2025-02-07 Smar do video
- 2025-02-06 Litowe baterie AA Li/FeS2 a alkaliczne
- 2025-02-07 Gliwice => Business Development Manager - Network and Network Security
- 2025-02-07 Warszawa => System Architect (Java background) <=
- 2025-02-07 Warszawa => System Architect (background deweloperski w Java) <=
- 2025-02-07 Warszawa => Solution Architect (Java background) <=
- 2025-02-07 Gliwice => Ekspert IT (obszar systemów sieciowych) <=