🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.c
Article #309702

Re: Dziedziczcenie i metody

#309702
From: Marcin
Date: Thu, 07 Jun 2018 20:32
45 lines
3123 bytes
W dniu 07.06.18r. o 18:52, Piotr Gałka pisze:
> W dniu 2018-06-07 o 15:42, radoslaw@korzeniewski.net pisze:
>> W dniu czwartek, 7 czerwca 2018 15:35:11 UTC+2 użytkownik Piotr Gałka 
>> napisał:
>>> Dla mnie dziwne.
>>> Skoro B nie ma send() to powinna zawołać się send() z A (jeśli 
>>> publiczna).
>>> Ta powinna zawołać send(int), a że ta jest wirtualna to powinna zawołać
>>> się ta z B.
>>
>> Dokładnie taki sam tok myślenia przeprowadziłem ale niestety generuje 
>> to błąd podczas kompilacji. Zakładam że to ja jestem w błędzie i 
>> dlatego poszukuję pomocy.
>>
> 
> Sprawdziłem pod C++ Builder 5 (który używam) i jest tak samo jak u Ciebie.
> Wychodzi na to, że zapewne użycie tej samej nazwy w klasie pochodnej 
> zasłania wszystkie funkcje o takiej nazwie z kasy bazowej.
> Chodzi mi po głowie, że mogłem kiedyś coś takiego wiedzieć, ale wiedza 
> nie używana ulatuje (o dziedziczeniu uczyłem się z książki od C do C++, 
> którą kupiłem w 93r.).
> P.G.

Tak wlasnie jest w C++ (odwrotnie niz w Javie, tam by to dzialalo). I 
nawet jest na to uzasadnienie. Zalozmy, ze mamy takie cos:

	struct A { void f(long); };
	struct B : A { void f(long); };

	B b;
	b.f(0);

Oczywiscie zawola sie B::f. Teraz przypuscmy, ze nagle ktos postanowil 
do klasy A dolozyc funkcje void f(int);. Gdyby B::f nie przykrywalo 
wszystkich wersji A::f to w tym momencie zawolaloby sie A::f(int) i 
zmienia sie dzialanie naszego programu (0 jest int-em, wczesniej bylo 
niejawnie rzutowane na longa). Jezeli teraz spojrzymy na A jak na 
interfejs a na B jak na implementacje, to zmiana czegos w interfejsie 
moze rozwalic caly program. Co wiecej tak samo by bylo gdyby w A 
wczesniej w ogole nie bylo funkcji f. Dolozenie f(int) by wszystko 
rozwalilo. Jeszcze dolozmy do tego, ze tworca A raczej nie musi wiedziec 
jak jego interfejs jest uzywany, wiec moze dokladac co chce. Az dziw, ze 
programy w Javie dzialaja po upgradzie API :)

Marcin
Technical Details
Message-ID: <5b19964f$0$675$65785112@news.neostrada.pl>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed2.atman.pl!newsfeed.atman.pl!goblin1!goblin.stu.neva.ru!newsfeed.neostrada.pl!unt-exc-01.news.neostrada.pl!unt-spo-a-02.news.neostrada.pl!news.neostrada.pl.POSTED!not-for-mail
References: <342f89bb-b3d4-4c87-9dd7-97a572d63ab0@googlegroups.com> <pfbb7c$9cm$1@node1.news.atman.pl> <pfbcac$dra$1$PiotrGalka@news.chmurka.net> <f423abc5-5a4e-49da-b82d-6c9485dcacc5@googlegroups.com> <pfbntm$i5n$1$PiotrGalka@news.chmurka.net>

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!goblin1!goblin.stu.neva.ru!newsfeed.neostrada.pl!unt-exc-01.news.neostrada.pl!unt-spo-a-02.news.neostrada.pl!news.neostrada.pl.POSTED!not-for-mail
Subject: Re: Dziedziczcenie i metody
Newsgroups: pl.comp.lang.c
References: <342f89bb-b3d4-4c87-9dd7-97a572d63ab0@googlegroups.com> <pfbb7c$9cm$1@node1.news.atman.pl> <pfbcac$dra$1$PiotrGalka@news.chmurka.net> <f423abc5-5a4e-49da-b82d-6c9485dcacc5@googlegroups.com> <pfbntm$i5n$1$PiotrGalka@news.chmurka.net>
From: Marcin <a@a.a>
Date: Thu, 7 Jun 2018 22:32:10 +0200
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:52.0) Gecko/20100101 Thunderbird/52.8.0
MIME-Version: 1.0
In-Reply-To: <pfbntm$i5n$1$PiotrGalka@news.chmurka.net>
Lines: 46
Message-ID: <5b19964f$0$675$65785112@news.neostrada.pl>
Organization: Telekomunikacja Polska
NNTP-Posting-Host: 83.23.141.39
X-Trace: 1528403535 unt-rea-a-01.news.neostrada.pl 675 83.23.141.39:51341
X-Complaints-To: abuse@news.neostrada.pl
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit