 |
C++Talk.NET C++ language newsgroups
|
| View previous topic :: View next topic |
| Author |
Message |
Franz-Josef Vorspohl Guest
|
Posted: Sun Dec 28, 2003 2:25 pm Post subject: Stroustrup 3./4. Auflage 13.2.1 Templates |
|
|
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
|
Posted: Sun Dec 28, 2003 11:36 pm Post subject: Re: Stroustrup 3./4. Auflage 13.2.1 Templates |
|
|
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
|
Posted: Mon Dec 29, 2003 3:47 pm Post subject: Re: Stroustrup 3./4. Auflage 13.2.1 Templates |
|
|
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 |
|
 |
|
|
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
|
|