🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.programming
Article #215571

Re: Ada Tutorial - w Instytucie Lotnictwa

#215571
From: Wojciech Muła
Date: Thu, 09 May 2019 17:29
38 lines
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-mail
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>

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