Article View: be.comp.programming
Article #8294RFC: C++-deel van de FAQ.
From: Dominique Devriese
Date: Sun, 30 Jun 2002 14:08
Date: Sun, 30 Jun 2002 14:08
211 lines
10181 bytes
10181 bytes
Ik kon die regel "Domi, knock yourself out" daar toch niet zo laten
staan, en ik heb dusnet een hoofdstuk bij�engetikt over C++, hieronder
de diff vind je hieronder, graag jullie commentaar en suggesties.
(Kheb ook nog wat spelfoutjes verbeterd, sorry, Philip, ik kon het
niet laten :)
-------------------------- De diff ---------------------------
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,421
< \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/}).
>
> 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.
>
> \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'', en die zijn niet
> C++-specifiek, maar een C++-programmeur zou het toch moeten gelezen
> hebben...
>
> 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.
>
> \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: de C++ FAQ Lite:
> \url{http://www.parashift.com/c++-faq-lite/}.
> 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:
<87eleouael.fsf@living.pandora.be>Path:
arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!sn-xit-02!sn-xit-05!sn-xit-06!supernews.com!news.maxwell.syr.edu!news.tele.dk!small.news.tele.dk!212.43.194.69!fr.clara.net!heighliner.fr.clara.net!proxad.net!proxad.net!skynet.be!skynet.be!ossa.telenet-ops.be!afrodite.telenet-ops.be.POSTED!not-for-mailShow Full Headers
Complete Article Headers
X-Google-Language: DUTCH,ASCII X-Google-Thread: fcea4,552adab32a9138f6,start X-Google-Attributes: gidfcea4,public X-Google-ArrivalTime: 2002-06-30 07:08:20 PST Path: arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!sn-xit-02!sn-xit-05!sn-xit-06!supernews.com!news.maxwell.syr.edu!news.tele.dk!small.news.tele.dk!212.43.194.69!fr.clara.net!heighliner.fr.clara.net!proxad.net!proxad.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: RFC: C++-deel van de FAQ. From: Dominique Devriese <fritmebufstek@pandora.be> Message-ID: <87eleouael.fsf@living.pandora.be> Lines: 211 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 14:08:19 GMT NNTP-Posting-Host: 213.118.172.139 X-Complaints-To: abuse@telenet.be X-Trace: afrodite.telenet-ops.be 1025446099 213.118.172.139 (Sun, 30 Jun 2002 16:08:19 MET DST) NNTP-Posting-Date: Sun, 30 Jun 2002 16:08:19 MET DST Organization: Telenet Internet