Article View: be.comp.programming
Article #8298Re: RFC: C++-deel van de FAQ.
From: Dominique Devriese
Date: Sun, 30 Jun 2002 15:55
Date: Sun, 30 Jun 2002 15:55
261 lines
12231 bytes
12231 bytes
Niels Van Eetvelde <pleaseusethe@replyto.address> writes:
> Op 30 jun 2002 schreef Dominique Devriese:
>
> >> \item MS Visual C++(.NET) is Microsofts C++ compiler. Bij vele
> >> programmeurs staat deze bekend om zijn slechte ondersteuning van de
> >> standaard, maar volgens anderen zou dat de laatste tijd verbeterd
> >> zijn. Deze compiler wordt geleverd met MSs IDE Visual Studio.
>
>
> komkom moet dit nu echt, de bedoeling was een \emph{neutrale} FAQ te maken,
> niet ?
M.i. is dit zo neutraal als maar mogelijk: ik geef beide meningen, en
neem geen standpunt in.
>
> >>
> >> Als u op zoek bent naar een bepaalde library, raden wij u aan de
> >> volgende kanalen te proberen:
> >> 1 zoekrobots: google (\url{http://www.google.com/}) is your friend !
> >> 2 SourceForge (\url{http://www.sf.net/}) en freshmeat
> >> (\url{http://www.freshmeat.net}) vind je vele vrij\"e libraries.
> >> 3 Vraag het eens in de nieuwsgroep: be.comp.programming, als je er
> >> niet zo snel \'e\'en vindt.
>
> dat lijkt mij eerder algemene informatie, als dat 1 keer in die FAQ staat
> is dat voldoende, bij de extra resources ?
Goed idee.. kunnen we misschien bij "Programmeren Algemeen" gooien...
>
> >> Persoonlijk raad ik je ook het volgende boek aan:
> >> ``Design patterns: Elements of Reusable Object-oriented software''.
> >> Dit gaat over zogenaamde ``design patterns'', en die zijn niet
> >> C++-specifiek, maar een C++-programmeur zou het toch moeten gelezen
> >> hebben...
>
> Der is geen enkel boek dat iemand /moet/ gelezen hebben, ik ken dat boek
> niet eens, dus wees wat voorzichtiger met dergelijke uitspraken.
Als je hier de ng wat volgt, zul je zien dat dat hier vaak gezegd
wordt, hoor, over allerhande boeken.
Verder is het boek in kwestie erg goed en erg bekend. Concepten zoals
"singleton pattern" and "observer pattern" worden vaak gebruikt in
gesprekken tussen programmeurs, en komen uit dit boek. Er is een
nederlandse vertaling van en de 1e kanners informatica in leuven
moeten het verplicht lezen.
Dit gewoon om mij toch wat te rechtvaardigen, maar "moeten" is
misschien idd wat overdreven, wat vind je van "is een aanrader" of
zoiets ?
>
> >> Ook van de ``C++ FAQ Lite'' leer je veel. Deze is te vinden op
> >> \url{http://www.parashift.com/c++-faq-lite/}. Er is ook een uitgave
> >> in boekvorm, iirc.
> >>
> >
>
> idd, heel luchtig opgesteld met geregeld wat droge humor derbij, de
> volgende kan misschien ook in dat hoofdstukje van C++ derbij: de
> "Guru of the week", maar dat is niet echt beginners stuff, maar best wel
> leerrijk als je je C++ kennis eens wilt testen. Ik heb het even opgezocht
> en dat ding staat tegenwoordig op http://www.gotw.ca/gotw/
Kzal het erbij gooien, hier is een aangepaste patch:
80c80
< overeengekomen om om ervoor te zorgen dat deze groep een prettig, effici\"ent
---
> overeengekomen om ervoor te zorgen dat deze groep een prettig, effici\"ent
94c94
< \item Probeer zo veel mogelijk correct taal gebruik te handhaven, niet
---
> \item Probeer zo veel mogelijk correct taalgebruik te handhaven; niet
229c229
< `grote' taal, maar C eist van de programmeur wel enig discipline.
---
> `grote' taal, maar C eist van de programmeur wel enige discipline.
241c241,412
< \subsubsection{Domi, knock yourself out}
---
> \subsubsection{Wat is C++ ?}
>
> C++ is een geavanceerde, objectgeori\"enteerde taal. Het is \'e\'en
> van de meest gebruikte talen in de huidige informaticawereld.
>
> C++ is ontstaan als een uitbreiding van de taal C (zie hierboven), en
> deelt er ook wat syntax mee. Het is echter een heel andere taal
> geworden, waarin op een heel andere manier geprogrammeerd wordt.
>
> C++ is gestandaardiseerd door internationale comit\'es in de schoot
> van de internationale organisaties ANSI en ISO. Naast de syntax van
> de taal wordt ook een standaard bibliotheek gespecifieerd: de
> STL. Deze bevat vooral zgn. ``container classes''.
>
> \subsubsection{Waarvoor wordt C++ vooral gebruikt ?}
>
> C++ is een ``general purpose'' taal. Ze is krachtig door haar
> object-geori\"enteerdheid en de heel handige STL, en snel doordat ze
> gecompileerd wordt naar machinecode. C++-programma's kunnen ook
> gebruik maken van de vele C-library's.
>
> \subsubsection{Welke compilers zijn beschikbaar ?}
>
> Er zijn vele compilers beschikbaar voor C++. Hieronder is een
> onvolledige lijst van de meest bekende.
>
> \begin{itemize}
> \item GCC, de GNU Compiler Collection heeft ook ondersteuning (
> dwz. een ``front end'') voor C++: g++. GCC is zogenaamde ``vrij\"e'' en
> ``open source'' software, beschikbaar onder de GPL. Hij heeft een
> goede reputatie, is beschikbaar voor veel vele platformen (*BSD,
> Linux, Windows, andere Unixen etc.) en architecturen (i386, sparc
> etc.) houdt zich goed aan de standaard, en genereert redelijk snelle
> code. Een windows-versie van deze compiler bestaat onder de naam
> mingw32.
> \item MS Visual C++(.NET) is Microsofts C++ compiler. Bij vele
> programmeurs staat deze bekend om zijn slechte ondersteuning van de
> standaard, maar volgens anderen zou dat de laatste tijd verbeterd
> zijn. Deze compiler wordt geleverd met MSs IDE Visual Studio.
> \item Andere compilers zijn o.a. Intel C++, IBM C++, Comeau C++ etc.
> Hierover heb ik niet zoveel informatie. Comeau C++ is naar verluidt
> de eerste die de hele C++ standaard ondersteunt (sinds hij het
> ``export''eren van templates ondersteunt).
> \end{itemize}
>
> \subsubsection{Waar vind ik een bibliotheek voor xxx ?}
> C++-programma's kunnen gebruik maken van veel libraries.
>
> Allereerst is er de STL. De Standard Template Library, die
> hoort bij de c++-standaard, en dus overal beschikbaar is. Deze
> voorziet vooral ``container classes'', en io-libraries. Het is een
> erg goede bibliotheek, erg goed ontworpen, zeer handig en snel.
> Veel gebruikte implementaties komen van SGI en GNU ( beide vrij\"e
> software \ref{FIXME}).
>
> Ook bekend zijn de Boost libraries (\url{http://www.boost.org/}).
> Deze zijn bedoeld als uitbreiding van de STL. Ze bevatten klassen
> voor allerhande doeleinden, o.a. wiskundige concepten, extra container
> classes, ``safe pointers'' etc. Deze zijn over het algemeen ontworpen
> in dezelfde stijl als de STL.
>
> Verder zijn er ook andere libraries. Er zijn erg veel en verscheiden
> c++-libraries bescihkbaar, zowel commerci\"eel als vrij.
> Twee voorbeelden zijn de bekende cross-platform GUI-toolkits WxWindows
> (\url{http://www.wxwindows.org/}) en Qt
> (\url{http://www.trolltech.com/}).
>
> \subsubsection{Welke boeken raden jullie aan over C++ ?}
>
> Hierover zijn de meningen verdeeld... Ikzelf haal mijn wijsheid vooral
> van het internet, maar over het algemeen komen de volgende boeken vaak
> terug:
> ``Programming C++'' van Bjarne Stroustrup (de auteur van de originele
> c++ compiler, geloof ik...)
>
> //FIXME: aanvullen
>
> Persoonlijk raad ik je ook het volgende boek aan:
> ``Design patterns: Elements of Reusable Object-oriented software''.
> Dit gaat over zogenaamde ``design patterns''.
> Die zijn niet C++-specifiek, maar voor een C++-programmeur is het
> zeker een aanrader.
>
> Kijk ook bij de Links hieronder, voor enkele zeer interessante websites...
>
> \subsubsection{Waarom krijg ik foutmelding XXX ?}
>
> Vele fouten komen vaak terug op be.comp.programming, en hieronder zijn
> de belangrijkste gegroepeerd. De errors die je hieronder leest kunnen
> verschillen van compiler tot compiler, maar over het algemeen klinken
> ze meestal toch hetzelfde.
>
> ``Multiple definition of class XXX (previously defined here: ... )'':
> Dit kan eraan liggen dat je twee klassen met dezelfde naam hebt
> (zeldzaam...), maar over het algemeen ligt het aan het volgende:
> In je header files (.h-bestanden) defini\"eer je classes. Voor de
> C++-compiler is het belangrijk dat deze maar \'e\'en keer gedefini�erd
> worden. Daarom is het de gewoonte dat je aan het begin van de header
> het volgende zet:
> #ifndef ___BESTANDSNAAM_H___
> #define ___BESTANDSNAAM_H___
> waarbij ___BESTANDSNAAM_H___ een macro is die uniek is voor die
> header.
> Aan het einde van de header plaats je:
> #endif // ___BESTANDSNAAM_H___
> Deze dingen staan bekend als ``include guards'', of ``header protection''.
>
> ``Undefined reference to XXX'':
> Vaak gebeurt dit als je een statische variabele hebt in je class. Het
> is namelijk niet voldoende om deze in de class definitie te plaatsen.
> Hij moet zelf ook apart gedefini\"eerd worden (zie de volgende error
> voor meer uitleg over defini\"eren en declareren).
> als je bijvoorbeeld de volgende class (in je header-file) hebt:
> class A {
> static char B;
> };
> moet je in je .cpp-file het volgende hebben staan:
> char A::B;
>
> ``Undefined reference to XXX'' of ``Multiple definition of variable
> XXX''
> Deze fouten liggen over het algemeen aan het verkeerd begrijpen van
> het verschil tussen declareren en defini\"eren. Hieronder probeer ik
> het kort uit te leggen, maar een goed boek legt je dit waarschijnlijk
> beter uit.
> Declareren is ``zeggen aan de compiler dat een bepaald woord op een
> bepaalde manier mag gebruikt worden''. E\"en woord kan namelijk voor
> verschillende dingen staan: een variabele, van een bepaald type, een
> functie, een class of struct, een namespace etc.
> Voorbeelden van declaraties:
> class A;
> std::string A( char, int );
> extern char a;
>
> Definities zijn iets anders: ze geven de compiler alle informatie die
> hij nodig heeft om de naam in kwestie te declareren.
> vb.
> // de klasse a gedefini�erd.
> class A {
> std::string mA;
> public:
> std::string a();
> };
>
> // de member functie A::a() van hier net boven gedefini\"eerd.
> std::string A::a()
> {
> return mA;
> };
>
> char a;
>
> Het is belangrijk dat hoewel declaraties zoveel mogen voorkomen als je
> wilt, definities maar een keer mogen voorkomen. Daarom ook dat je
> declaraties in headers zet (.h), die je #include't in andere
> bestanden, en definities in implementatie-bestanden (.cpp of .cc of
> ...).
> Definities van class's zijn een geval apart. Je zet ze best in je
> header files met ``include guards'' errond ( zie twee errors terug ).
> Als je deze regels goed volgt, worden de meeste van je errors opgelost.
>
> Dit zijn de meest voorkomende fouten, meer fouten vind je in de ``C++
> FAQ Lite'' op \url{http://www.parashift.com/c++-faq-lite/}.
>
> \subsubsection{Waar vind ik meer informatie ?}
>
> 1 Een goed boek: zie de vraag daarover even terug...
> 2 Het internet: o.a.
> de ``C++ FAQ Lite'': \url{http://www.parashift.com/c++-faq-lite/}.
> de ``Guru of the week'' pagina's: \url{http://www.gotw.ca/gotw/}.
> 3 De nieuwsgroep be.comp.programming
> 4 De nieuwsgroep comp.programming.c++
sjuus
domi
--
Dominique Devriese
http://users.pandora.be/frit/domi.gpg
Technical Details
Message-ID:
<87u1nkahij.fsf@living.pandora.be>Path:
arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!sn-xit-02!sn-xit-04!sn-xit-06!supernews.com!newspump.sol.net!skynet.be!skynet.be!ossa.telenet-ops.be!afrodite.telenet-ops.be.POSTED!not-for-mailReferences:
<87eleouael.fsf@living.pandora.be> <Xns923DB39103728nielsvaneetvelde@195.130.132.65>Show Full Headers
Complete Article Headers
X-Google-Language: DUTCH,ASCII X-Google-Thread: fcea4,552adab32a9138f6 X-Google-Attributes: gidfcea4,public X-Google-ArrivalTime: 2002-06-30 08:55:08 PST Path: arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!sn-xit-02!sn-xit-04!sn-xit-06!supernews.com!newspump.sol.net!skynet.be!skynet.be!ossa.telenet-ops.be!afrodite.telenet-ops.be.POSTED!not-for-mail Sender: domi@living.pandora.be Newsgroups: be.comp.programming Subject: Re: RFC: C++-deel van de FAQ. References: <87eleouael.fsf@living.pandora.be> <Xns923DB39103728nielsvaneetvelde@195.130.132.65> From: Dominique Devriese <fritmebufstek@pandora.be> Message-ID: <87u1nkahij.fsf@living.pandora.be> Lines: 261 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-15 Content-Transfer-Encoding: 8bit Date: Sun, 30 Jun 2002 15:55:02 GMT NNTP-Posting-Host: 213.118.172.139 X-Complaints-To: abuse@telenet.be X-Trace: afrodite.telenet-ops.be 1025452502 213.118.172.139 (Sun, 30 Jun 2002 17:55:02 MET DST) NNTP-Posting-Date: Sun, 30 Jun 2002 17:55:02 MET DST Organization: Telenet Internet