Article View: pl.comp.programming
Article #215571Re: Ada Tutorial - w Instytucie Lotnictwa
From: Wojciech Muła
Date: Thu, 09 May 2019 17:29
Date: Thu, 09 May 2019 17:29
38 lines
3090 bytes
3090 bytes
On Thursday, May 9, 2019 at 11:32:28 AM UTC+2, Roman Tyczka wrote:
> On Tue, 7 May 2019 12:15:04 -0700 (PDT), Wojciech Muła wrote:
>
> > Zadanie dla chętnych: w ilu miejscach może tu polecieć wyjątek?
> > Type1 i Type2 to jakieś klasy dostarczone przez użytkownika,
> > nic o nich nie wiemy.
> >
> > Type1 fun(Type2 a, Type2 b)
> > {
> > if (a.get_value() > b.get_value()) {
> > return a.get_foo();
> > }
> >
> > return a.get_bar() + b.get_foo();
> > }
> >
> > w.
>
> Ja tak z ciekawości, bo napisałeś dalej, że jest tych miejsc 13, czy
> mógłbyś je wskazać? Nie programuję w C++, więc widzę tylko możliwość
> wysypki w wywołaniach metod (zarówno w nich samych jak i na ich braku czyli
> nilu). Ale z tego i tak nie wyjdzie aż 13. Czy masz tu na myśli jeszcze
> przeciążanie operatorów? Co jeszcze?
To czego nie zauważyłeś na pierwszy rzut oka to niejawne konwersje.
Np. get_bar może zwrócić instancję klasy Kotek, ale operator dodawania
jest zdefiniowany dla Pieska --- i jeśli Pieska da się utworzyć
z Kotka, to mamy dwa konstruktory konwertujące, które oczywiście mogą
rzucić wyjątki. Ponadto argumenty są przekazywane przez kopie, więc
wołany jest konstruktor kopiujący Type1, który potencjalnie może
coś rzucić. Tak samo wyniki zwracane mogą być typów konwertowalnych
do Type2 i przed 'return' będzie konwersja, które może się nie powieść.
C++ trochę ten problem rozwiązał przez jawne zabronienie niejawnych
konwersji :) (słówko explicit), ale to musi być wyrażone wprost
w programie.
w.
Technical Details
Message-ID:
<c484a1b0-6e86-4d88-9491-76b06ce3e61d@googlegroups.com>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!takemy.news.telefonica.de!telefonica.de!weretis.net!feeder7.news.weretis.net!proxad.net!feeder1-2.proxad.net!209.85.160.216.MISMATCH!t9no6642037qtn.0!news-out.google.com!b26ni455qtp.1!nntp.google.com!t9no6642029qtn.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mailReferences:
<c1760262-b4a3-44fe-a99e-2fa16be86820@googlegroups.com> <btKtE.25850$wd2.16727@fx24.fr7> <9537dd39-0164-41a6-803b-393b77b4a701@googlegroups.com> <ox7zss72bzio$.dlg@tyczka.com>Show Full Headers
Complete Article Headers
X-Received: by 2002:ac8:1c53:: with SMTP id j19mr4982101qtk.152.1557423001852; Thu, 09 May 2019 10:30:01 -0700 (PDT) X-Received: by 2002:a37:a28c:: with SMTP id l134mr2729338qke.43.1557423001582; Thu, 09 May 2019 10:30:01 -0700 (PDT) Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!takemy.news.telefonica.de!telefonica.de!weretis.net!feeder7.news.weretis.net!proxad.net!feeder1-2.proxad.net!209.85.160.216.MISMATCH!t9no6642037qtn.0!news-out.google.com!b26ni455qtp.1!nntp.google.com!t9no6642029qtn.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail Newsgroups: pl.comp.programming Date: Thu, 9 May 2019 10:29:58 -0700 (PDT) In-Reply-To: <ox7zss72bzio$.dlg@tyczka.com> Complaints-To: groups-abuse@google.com Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=217.97.105.187; posting-account=VFwkXwoAAADdT4-lLKRZrMYkTjizGoyn NNTP-Posting-Host: 217.97.105.187 References: <c1760262-b4a3-44fe-a99e-2fa16be86820@googlegroups.com> <btKtE.25850$wd2.16727@fx24.fr7> <9537dd39-0164-41a6-803b-393b77b4a701@googlegroups.com> <ox7zss72bzio$.dlg@tyczka.com> User-Agent: G2/1.0 MIME-Version: 1.0 Message-ID: <c484a1b0-6e86-4d88-9491-76b06ce3e61d@googlegroups.com> Subject: Re: Ada Tutorial - w Instytucie Lotnictwa From: Wojciech Muła <wojtek.mula@gmail.com> Injection-Date: Thu, 09 May 2019 17:30:01 +0000 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit