🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.c
Article #308545

Re: Jak wołać konstruktor z konstruktora?

#308545
From: bartekltg
Date: Tue, 10 May 2016 12:16
67 lines
3114 bytes
On 10.05.2016 14:12, bartekltg wrote:
> On 10.05.2016 08:03, Borneq wrote:
>> W dniu 10.05.2016 o 00:05, bartekltg pisze:
>>>     fu(int A, int B, int C)
>>>     {
>>>         a=A;
>>>         b=B;
>>>         c=C;
>>>     };
>>>     fu(int A): fu(A,A,A) {};
>>
>> A co gdy mamy najpierw wyliczać argumenty a dopiero POTEM podać do
>> konstruktora?
>>
>> fu(istream stream, int size, int position)
>> {
>>    wczytywanie ze strumienia stream od pozycji position, do bufora,
>>    którego rozmiar jest nie większy niż size-position
>> }
>>
>> fu(istream stream)
>> {
>>    wyliczanie pozycji za pomocą tellg()
>>    ustawienie się na końcu za pomocą stream.seekg(0, ios::end);
>>    wyliczenie rozmiaru za pomocę tellg()
>>    ustawienie się w poprzedniej pozycji: stream.seekg(position,ios::beg);
>>    dopiero teraz mamy wołać konstruktor trójargumentowy
>> }
>
> W takim wypadku powtarzające się mięsko wsadziłbym w inną prywatną
> funkcję i wołał ją z obu konstruktorów.
>
> void init (int A, int B, int C)
>    {
>      a=A;
>      b=B;
>      c=C;
>     };
>
>       fu(int A, int B, int C)
>       {
>          init (A,B,C)
>       };
>      fu(bla s)
>      {
>      //magia na s
>      init (A,B,C)
>       }
>
> Dlaczego nie bardzo można wołać konsturktor z konstruktora...
> Konstruktor to nie zwykła funkcja, bo zanim wejdziesz
> w jej ciało odpala ona konstruktory pol składowych.
> Jeśli więc odpalilibyśmy konstruktor wewnetrz ciałą
> konstruktora, to albo skłądowe byłyby inicjalizowane
> rez jeszcze (bez sensu) albo kompilator by je pomijał,
> co, niezależnie od tego, czy pominąłby je z wewnętrznego czy
> zewnetrznego konstruktora, mogło by doprowadzić do odstrzelenia
> sobioe palca (ciało pierwszego konstuktora wymaga jakiejś, choćby
> domyślnej inicjalizacji obiektu skłądowego, a wołany dalej
> konstruktor inicjalizuje ten obiekt zmienną:) ).

I dodatkowo, co tak naprawdę robi konstruktor wywołany w funkcji:
https://isocpp.org/wiki/faq/ctors#init-methods

pzdr
bartekltg
>
Technical Details
Message-ID: <ngsjep$a0n$1@node1.news.atman.pl>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed2.atman.pl!newsfeed.atman.pl!.POSTED!not-for-mail
References: <ngqsgh$nj4$1@node2.news.atman.pl> <ngr1k7$ne3$1@node1.news.atman.pl> <ngrtjt$m40$1@node2.news.atman.pl> <ngsj6u$ddv$1@node2.news.atman.pl>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed2.atman.pl!newsfeed.atman.pl!.POSTED!not-for-mail
From: bartekltg <bartekltg@gmail.com>
Newsgroups: pl.comp.lang.c
Subject: Re: Jak wołać konstruktor z konstruktora?
Date: Tue, 10 May 2016 14:16:25 +0200
Organization: ATMAN - ATM S.A.
Lines: 68
Message-ID: <ngsjep$a0n$1@node1.news.atman.pl>
References: <ngqsgh$nj4$1@node2.news.atman.pl> <ngr1k7$ne3$1@node1.news.atman.pl> <ngrtjt$m40$1@node2.news.atman.pl> <ngsj6u$ddv$1@node2.news.atman.pl>
NNTP-Posting-Host: 89-73-81-145.dynamic.chello.pl
Mime-Version: 1.0
X-Trace: node1.news.atman.pl 1462882585 10263 89.73.81.145 (10 May 2016 12:16:25 GMT)
X-Complaints-To: usenet@atman.pl
NNTP-Posting-Date: Tue, 10 May 2016 12:16:25 +0000 (UTC)
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.6.0
In-Reply-To: <ngsj6u$ddv$1@node2.news.atman.pl>
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit