Article View: pl.comp.lang.c
Article #308544Re: Jak wołać konstruktor z konstruktora?
From: bartekltg
Date: Tue, 10 May 2016 12:12
Date: Tue, 10 May 2016 12:12
62 lines
2815 bytes
2815 bytes
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ą:) ).
pzdr
bartekltg
Technical Details
Message-ID:
<ngsj6u$ddv$1@node2.news.atman.pl>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!agh.edu.pl!news.agh.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>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!agh.edu.pl!news.agh.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:12:13 +0200 Organization: ATMAN - ATM S.A. Lines: 63 Message-ID: <ngsj6u$ddv$1@node2.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> NNTP-Posting-Host: 89-73-81-145.dynamic.chello.pl Mime-Version: 1.0 X-Trace: node2.news.atman.pl 1462882334 13759 89.73.81.145 (10 May 2016 12:12:14 GMT) X-Complaints-To: usenet@atman.pl NNTP-Posting-Date: Tue, 10 May 2016 12:12:14 +0000 (UTC) User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.6.0 In-Reply-To: <ngrtjt$m40$1@node2.news.atman.pl> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit