eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingCo może robić konstruktor i dlaczego nie?Re: Co może robić konstruktor i dlaczego nie?
  • Path: news-archive.icm.edu.pl!news.icm.edu.pl!news.nask.pl!news.nask.org.pl!news.unit
    0.net!news.glorb.com!postnews.google.com!n16g2000vbn.googlegroups.com!not-for-m
    ail
    From: Andrzej Jarzabek <a...@g...com>
    Newsgroups: pl.comp.programming
    Subject: Re: Co może robić konstruktor i dlaczego nie?
    Date: Fri, 6 Jul 2012 02:10:35 -0700 (PDT)
    Organization: http://groups.google.com
    Lines: 43
    Message-ID: <1...@n...googlegroups.com>
    References: <4ff4908d$0$1302$65785112@news.neostrada.pl>
    <o...@a...home>
    <4ff4a8dd$1$26700$65785112@news.neostrada.pl>
    <jt2mjk$hud$1@mx1.internetia.pl> <jt3ab8$gr8$1@inews.gazeta.pl>
    <4ff54041$1$26701$65785112@news.neostrada.pl>
    <7...@a...googlegroups.com>
    <4ff5a465$0$1221$65785112@news.neostrada.pl>
    NNTP-Posting-Host: 80.254.155.43
    Mime-Version: 1.0
    Content-Type: text/plain; charset=ISO-8859-2
    Content-Transfer-Encoding: quoted-printable
    X-Trace: posting.google.com 1341565931 31638 127.0.0.1 (6 Jul 2012 09:12:11 GMT)
    X-Complaints-To: g...@g...com
    NNTP-Posting-Date: Fri, 6 Jul 2012 09:12:11 +0000 (UTC)
    Complaints-To: g...@g...com
    Injection-Info: n16g2000vbn.googlegroups.com; posting-host=80.254.155.43;
    posting-account=jr5y-woAAAAWidgVjrSJ6j8m650CTb-v
    User-Agent: G2/1.0
    X-HTTP-UserAgent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.11 (KHTML, like
    Gecko) Chrome/20.0.1132.47 Safari/536.11,gzip(gfe)
    Xref: news-archive.icm.edu.pl pl.comp.programming:198290
    [ ukryj 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.

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: