Article View: pl.comp.lang.delphi
Article #334855Re: [outro] ]Re: Delphi do zastosowan domowych
From: Wojciech "Spook" Sura
Date: Fri, 20 Jan 2012 12:17
Date: Fri, 20 Jan 2012 12:17
97 lines
6028 bytes
6028 bytes
Dnia 20.01.2012 o 09:04 Arivald <NOSPAMarivald@interia.pl> napisał(a): > Ładnie się C++ rozwija ;-) To prawda :) Ale zdecydowanie wolniej niż Delphi, choć z drugiej strony pracuje nad nim dosyć duży komitet, więc jest szansa, że każda zmiana będzie mocno przemyślana. >> Do licha, ale wysoko wycelowałem. W C++ nie ma nawet własności, trzeba >> poprzestać na getterach i setterach. Można co najwyżej zrobić przekręt i >> zdefiniować podklasę żeby umożliwić zapis instancja.wlasnosc[4] = 3; > > Tu podobnie. I nie nazwał bym tego przekrętem. W C++ tworzenie klasy > jest bardzo tanie, znacznie tańsze niż w Delphi. Dodatkowo można > przeładować operatory, tak że koniec końców używanie takiej "property" > nie będzie się niczym różniło od jej użycia w Delphi. > > A kompilacja template w momencie tworzenia instancji daje możliwość > utworzenia jednego, prostego template klasy "property", i potem > kompilator sam będzie generował instancje dla różnych typów. > A jak dodasz do tego mechanizm trejtów (traits), z odpowiednią > konkretyzacją dla np. callbacków, to daje się łatwo zaimplementować > bardzo skomplikowane działania. Można, panie Arivaldzie, tylko że w Delphi - zgaduję, ale chyba trafnie - własności są cukrem składniowym dla wywołania gettera lub settera. Aby zrealizować składniowo własności w C++ trzeba byłoby wyprodukować trochę kodu, który istniałby tylko dla wygody programisty, a z drugiej strony spowalniał pracę algorytmów (nawet jeśli o rozkazy procesora, to po podniesieniu o kilka rzędów byłyby to już mierzalne czasy). >> Z drugiej strony w Delphi bardzo brakuje C++owego consta. W C++ const >> nie jest formalnie deklaratorem stałej, tylko modyfikatorem. Na >> przykład: >> >> int * i; // Wskaźnik do inta; >> const int * i; // Wskaźnik do stałego inta. Wskaźnik można >> przedefiniować, ale wartości wskazywanej przez niego - nie >> int const * i; // Stały wskaźnik do inta. Wskaźnika nie można >> przedefiniować, ale wartość przez niego wskazywaną - tak >> const int const * i; // Stały wskaźnik do stałego inta. >> >> Ciekawie są też skonstruowane metody z constem. Metoda const zobowiązuje >> się do niemodyfikowania zawartości klasy, na przykład: > > Hmmm... Ja o takich metodach myślę nieco innaczej. Metoda const to taka > metoda którą można wywołać na rzecz obiektu który jest const. Bo w > szczególnych wypadkach ona może jednak zmienić pola klasy. Hmm. Może zmienić, ale chyba tylko pośrednio, prawda? To znaczy na przykład wywołać metodę na składowej, która jest klasą. Zmiana będzie pośrednia: bezpośrednia zawartość klasy pozostanie niezmieniona, natomiast klasa zmieni się jako całość. Chyba, że mówi Pan jeszcze o czymś innym? > Co w tym mądrego? Bo nie widzę. Kompletnie nic - w momencie, w którym wie się, jak jest skonstruowane to wywołanie. Ale jeśli widzi się taką konstrukcję na początku nauki języka, to wygląda, jakby ktoś wstrzyknął do obiektowego języka składnię rodem z plików wsadowych. Nie brzmi to specjalnie atrakcyjnie, prawda? > To że strumień ma operatory << i >> dla większości wbudowanych typ to > konieczność. Powiedziałbym bardziej, że konwencja, a nie konieczność. Nic nie stoi na przeszkodzie, aby << i >> zastąpić metodami read() i write(), jak w innych językach. C++ jest językiem, który pozwala - prawie że - zbudować nowe, własne konstrukcje językowe, ale moim zdaniem taka elastyczność jest bardziej jego przekleństwem niż zaletą. > Istotniejszy jest fakt że w każdej klasie możesz przeładować operatory > << i >> w kontekście strumienia, dzięki czemu klasa sama będzie > wiedziała jak się zapisać i jak się wczytać z dowolnego strumienia. No to już jest jakiś argument, ale z drugiej strony klasa może implementować interface, powiedzmy, ISerializable, który ma metody void SaveTo(Stream s) i void LoadFrom(Stream s). Po raz wtóry to jest tylko kwestia konwencji zapisu. > Bo strumienie standardowe to podstawowa metoda interakcji z > użytkownikiem? A tego przeciążenia i łańcucha nie widać, tego się nauczy > później. No właśnie w moim przypadku to nie działa - nie znoszę, jak ktoś mi mówi "używaj tego, bo tak należy pisać". Lubię wiedzieć, jak coś działa. A poza tym jeśli chodzi o interakcję, to metod jest dużo - ot, choćby printf i scanf (i ich wersje safe). Pozdrawiam -- Spook. -- ! ._______. Warning: Lucida Console sig! //) ! ! || spk || www.spook.freshsite.pl / _ """*! ! ||_____|| spook at op.pl / ' | ""! ! | ___ | tlen: spoko_ws gg:1290136 /. __/"\ '! ! |_|[]_|_| May the SOURCE be with you! \/) \ !
Technical Details
Message-ID:
<op.v8dtq2biyumhbd@notebook.asus>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!not-for-mailReferences:
<1nva6kty8t73b$.dlg@hell.heaven> <jf99kg$t6e$1@news.dialog.net.pl> <162t4ulo0stz4.dlg@hell.heaven> <op.v8cee3coyumhbd@notebook.asus> <1i4rse32tw0m7.dlg@hell.heaven> <op.v8ciulumyumhbd@notebook.asus> <jfb799$qli$1@news.dialog.net.pl>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!not-for-mail From: "Wojciech \"Spook\" Sura" <spook.no@spamming.op.pl> Newsgroups: pl.comp.lang.delphi Subject: Re: [outro] ]Re: Delphi do zastosowan domowych Date: Fri, 20 Jan 2012 13:17:16 +0100 Organization: "Portal Gazeta.pl -> http://www.gazeta.pl" Lines: 178 Message-ID: <op.v8dtq2biyumhbd@notebook.asus> References: <1nva6kty8t73b$.dlg@hell.heaven> <jf99kg$t6e$1@news.dialog.net.pl> <162t4ulo0stz4.dlg@hell.heaven> <op.v8cee3coyumhbd@notebook.asus> <1i4rse32tw0m7.dlg@hell.heaven> <op.v8ciulumyumhbd@notebook.asus> <jfb799$qli$1@news.dialog.net.pl> NNTP-Posting-Host: 89-76-141-48.dynamic.chello.pl Mime-Version: 1.0 X-Trace: inews.gazeta.pl 1327061822 13949 89.76.141.48 (20 Jan 2012 12:17:02 GMT) X-Complaints-To: usenet@agora.pl NNTP-Posting-Date: Fri, 20 Jan 2012 12:17:02 +0000 (UTC) X-User: spoko_ws X-Antivirus: avast! (VPS 120120-0, 2012-01-20), Outbound message X-Antivirus-Status: Clean User-Agent: Opera Mail/11.60 (Win32) Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit