C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Stroustrup 3./4. Auflage 13.2.1 Templates

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German)
View previous topic :: View next topic  
Author Message
Franz-Josef Vorspohl
Guest





PostPosted: Sun Dec 28, 2003 2:25 pm    Post subject: Stroustrup 3./4. Auflage 13.2.1 Templates Reply with quote



Hi NG,

ich hab mir vorgenommen Templates (spaeter STL) doch zu noch mal zu
lernen und hab mir den Stroustrup geschnappt und bei Kapitel 13
gestartet.

Ich versteh schon folgenden Codeschnipsel nicht.

....
rep = new Srep (0, C());
....

Mir ist ueberhaupt nicht klar, was C() soll und wie ein passender
Konstruktor zu Srep aussehen koennte. Bzw was er damit ueberhaupt
bezweckt. ...

Vieleicht hat jemand der erfahrenen C++ Hasen (mit Stroustrup) einen
Moment Zeit und gibt mir einen Tipp.

Danke
Franz-Josef

PS:
Bin ich mit Fragen (spaeter evtl.) zur STL hier eigendlich auch
richtig?

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
Back to top
Jan Langer
Guest





PostPosted: Sun Dec 28, 2003 11:36 pm    Post subject: Re: Stroustrup 3./4. Auflage 13.2.1 Templates Reply with quote



Franz-Josef Vorspohl wrote:
Quote:
ich hab mir vorgenommen Templates (spaeter STL) doch zu noch mal zu
lernen und hab mir den Stroustrup geschnappt und bei Kapitel 13
gestartet.

Ich versteh schon folgenden Codeschnipsel nicht.

...
rep = new Srep (0, C());
...

Mir ist ueberhaupt nicht klar, was C() soll und wie ein passender
Konstruktor zu Srep aussehen koennte. Bzw was er damit ueberhaupt
bezweckt. ...

C() ist der default-konstruktor des zeichen-typs der string-klasse. wenn
zb C gleich char ist, dann ist C() gleich char().

und der explizite aufruf des default-ktors fuer eingebaute typen wie
char oder int initialisiert das objekt mit null.

der ktor fuer Srep koennte zb so aussehen:

Srep (int size, C c) : s (new C (size)), sz (size), n (1)
{
std::fill (s, s + size, c);
}

die klasse Srep soll (ich hab jetzt nich genau nachgelesen) soll nur die
eigentlichen string-daten nochmals kapseln, um die refrenz-zaehlung zu
ermoeglichen.

jan

--
jan langer ... [email]jan (AT) langernetz (DOT) de[/email]
"pi ist genau drei"

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Thorsten Nitz
Guest





PostPosted: Mon Dec 29, 2003 3:47 pm    Post subject: Re: Stroustrup 3./4. Auflage 13.2.1 Templates Reply with quote



Franz-Josef Vorspohl wrote:

Quote:
Ich versteh schon folgenden Codeschnipsel nicht.



Es geht um eine String-Klasse, die als Beispiel für Templates vorgeturnt
wird:

template <class C> class String {
struct Srep;
// usw.
};

Quote:
...
rep = new Srep (0, C());
...

Mir ist ueberhaupt nicht klar, was C() soll und wie ein passender
Konstruktor zu Srep aussehen koennte. Bzw was er damit ueberhaupt
bezweckt. ...


Was Srep in dem Beispiel soll, steht dort nicht. Allerdings bezieht sich
Stroustrup auf seine Sting-Klasse aus Kapitel 11.12. Ich nehme an,
"Srep" steht für "string representation" und soll im Beispiel eine
Hilfssstruktur sein, die die Daten der String-Klasse aufbewahrt. Ist
aber im Grunde auch egal.

Frage 1: Was bedeutet "C()"?

Es könnte der Aufruf einer Funktion sein, so es denn eine solchen Namens
gäbe. Im von mir Ergänzten sehen wir aber, dass C ein Datentyp ist.
Somit handelt es sich um die Konstruktion eines temporären Objekts vom
Typ C mittels seines Default-Konstruktors.

new Srep( ... ) erzeugt ein Objekt der Klasse Srep. Da zwei Parameter
übergeben werden, kann man vermuten, dass es einen Konstruktor gibt, der
das verarbeiten kann. Damit also zu Frage 2: Wie sieht ein passender
Konstruktor aus?

struct Srep {
Srep(int groesse, C fuellzeichen)
};

passt von der Signatur. Die Bedeutung der Parameter ist geraten.

In Kapitel 11.12 stellt Stroustrup eine Stringklasse auf der Basis von
char vor. Dort kannst Du Dir anschauen, wozu Srep gut sein könnte. Der
dortige Konstruktor erwartet allerdings als zweiten Parameter einen
Zeiger, während hier ein Objekt direkt übergeben wird. Daher kann man
dem Konstruktor des char-Beispiels eine Zeichenkette als Array zur
Initialisierung übergeben, während man im Template-Beispiel nur ein
einzelnes Objekt der Klasse C, also nur ein Zeichen, übergeben kann.

Jedenfalls wird ein Objekt der Klasse Srep erzeugt und initialisiert
mit einer Integer 0 und einem C-Objekt, das seinerseits
default-initialisiert ist.


Quote:
Bin ich mit Fragen (spaeter evtl.) zur STL hier eigendlich auch
richtig?


Wenn Du mit "STL" die Bestandteile der C++-Standard-Bibliothek meinst,
die landläufig unter diesem Namen geführt werden, auf jeden Fall. Wenn
Du hingegen die Template-Bibliothek von SGI meinst: die ist nicht
Bestandteil der Sprachdefinition von C++. Fragen zu den SGI-Spezifika
sind wohl eher off-topic.



Tschö, wa!
Thorsten

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German) All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.