🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: be.comp.programming
Article #8294

RFC: C++-deel van de FAQ.

#8294
From: Dominique Devriese
Date: Sun, 30 Jun 2002 14:08
211 lines
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-mail

Show 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