Article View: pl.comp.lang.c
Article #268136Re: Ciemna strona C++
From: Sebastian Kaliszewski
Date: Thu, 08 Nov 2007 14:53
Date: Thu, 08 Nov 2007 14:53
60 lines
3138 bytes
3138 bytes
Seweryn Habdank-Wojewódzki wrote:
>>struct bar {int member;};
>>struct foo : public bar {int member2;};
>>
>>void frobnicate(struct bar* x)
>
> Co się tu dzieje? Funkcja pobiera wskaźnik do obiektu typu bar.
>
>
>>{
>> printf("INSIDE: %d %d %d\n", x[0].member, x[1].member,
>>x[2].member);
>>x[0].member -= x[1].member;
>
>
> A tu skąd kompilator ma wiedzieć, że skok iteratora z pozycji [0] do [1]
> wynosi 8 a nie 4?
> Podany był w deklaracji bar, a bar ma rozmiar 4.
Skutek sp*pnego projektu języka. Jakby tablica nie była konwertowalna do
wskażnika na jej pierwszy element to by nie było problemu.
> Należy pomyśleć tak.
> Co byłoby, gdyby klasa foo była zdefiniowana w całkiem innej bibliotece
> dynamicznej. Skąd kompilator ma niby wiedzieć, że w tej bibliotece jest
> jakiaś np. class baz : public bar { int a[100]; }, i że dla niego ten
> iterator ma skakać o 4 * 100 + 4, przecież dla foo skacze o 8?
To jest błąd projektowy języka. Poważny.
Kompilator albo musi to wiedzieć a jak nie wie to albo trzeba wyliczenie
kroku przenieść do runtime albo niedopuszczać takiej konstrukcji.
> Kompilator wykonuje dokładnie to co Pan Felix chciał. Może Pan Felix
> powinien użyć zamiast bar *, bar **?
Kompilator realizuje źle zaprojrktowany język. W źle zaprojektowanym języku
kaszana jest na porządku dziennym.
> Kod Pana F. jak dla mnie jest fatalny. Jak można obiekt polimorficzny
> dokładnie rzutować na klasę bazową.
Co to znaczy dokładnie rzutować? Tu nic takiego nei ma.
> W C++ takie "cóś" bardziej elegancko
> robi się używając vector < smart_ptr <bar> >. Jak chce mieć stały rozmiar
> polecam boost::array.
>
> Używanie polimorfizmu albo trzeba robić, jak to przystoi na wysokim poziomie
> np. używając kontenery zamiast tablic i smart pointery a nie wskaźniki.
>
> Albo należy spodziewać się klapsa to tu to tam, kiedy ktoś dziubie kod ala
> C.
Co to znaczy ala C? To jest właśnie skutek kulawego języka.
pzdr
\SK
Technical Details
Message-ID:
<fgv710$kde$1@bozon2.softax.pl>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!newsfeed.gazeta.pl!opal.futuro.pl!news.internetia.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!bozon.softax.com.pl!not-for-mailReferences:
<fghgeo$spf$1@nemesis.news.tpi.pl> <20071106002442.aebf0037.sulsa@dontmail.me> <fgqpbs$9cu$1@news.vectranet.pl> <20071107012633.3efe623d@Vorago> <fgtc67$orn$1@news.vectranet.pl>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!newsfeed.gazeta.pl!opal.futuro.pl!news.internetia.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!bozon.softax.com.pl!not-for-mail From: Sebastian Kaliszewski <s@get.it.off.to.reply.informa.pl> Newsgroups: pl.comp.lang.c Subject: Re: Ciemna strona C++ Date: Thu, 08 Nov 2007 15:53:30 +0100 Organization: Softax news server Lines: 60 Message-ID: <fgv710$kde$1@bozon2.softax.pl> References: <fghgeo$spf$1@nemesis.news.tpi.pl> <20071106002442.aebf0037.sulsa@dontmail.me> <fgqpbs$9cu$1@news.vectranet.pl> <20071107012633.3efe623d@Vorago> <fgtc67$orn$1@news.vectranet.pl> NNTP-Posting-Host: 83.18.189.42 Mime-Version: 1.0 X-Trace: atlantis.news.tpi.pl 1194533345 24582 83.18.189.42 (8 Nov 2007 14:49:05 GMT) X-Complaints-To: usenet@tpi.pl NNTP-Posting-Date: Thu, 8 Nov 2007 14:49:05 +0000 (UTC) User-Agent: Mozilla Thunderbird 1.0.2 (X11/20050322) X-Accept-Language: en-us, en In-Reply-To: <fgtc67$orn$1@news.vectranet.pl> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit