Article View: pl.comp.lang.c
Article #308545Re: Jak wołać konstruktor z konstruktora?
From: bartekltg
Date: Tue, 10 May 2016 12:16
Date: Tue, 10 May 2016 12:16
67 lines
3114 bytes
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-mailReferences:
<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