Article View: de.comp.lang.c++
Article #1623Re: Q: gcc 2.7.1: Aufruf einer Konstruktormethode aus einer anderen
From: Dietmar Kuehl
Date: Fri, 23 Feb 1996 14:45
Date: Fri, 23 Feb 1996 14:45
118 lines
6004 bytes
6004 bytes
Hi,
Thomas Beck (tombeck@usemail.com) wrote:
: In message <pu91i3yvzc.fsf@themroc.colibri.de> - hf@colibri.de (Harald Fuchs)
: writes:
: >Man braucht kein Hellseher zu sein, um zu wissen, dass 'char*' in einem
: >sauberen C++-Programm nichts zu suchen hat.
: Mist... das C++ Buch, das ich vor einer Woche kaufte (bin neu in C++), macht
: regen Gebrauch von char* :-(
Das ist nicht weiter verwunderlich: Die meisten Buecher ueber C++
benutzen froh und munter Pointer und built-in Arrays, grade so, als
wenn das der beste Programmierstil ist, den es gibt (das ist vermutlich
auch einer der Gruende, warum ich hier mit meiner Anti-Pointer Meinung
ziemlich alleine dastehe). Das hat, soweit ich es sehe, im wesentlichen
zwei Gruende: 1. haben sich die Leute noch nicht abgewoehnt C zu
programmieren und 2. gibt es noch nicht lange gute (teilweise sogar
ueberlegene) Alternativen. DIE Alternative zu built-in Arrays sind STL
Vektoren. STL (Standard Template Library) ist der breiteren
Oeffentlichkeit (aeh, dem C++ Standardisierungs-Kommittee) erst seit
November '93 bekannt. Dem Normalverbraucher und Buchautor ist STL eher
weniger lange oder immernoch nicht bekannt (fuer diejenigen, die
dringenden Nachholbedarf empfinden: "STL Tutorial and Reference
Guide", D.R.Musser and A.Saini, Addison-Wesley, ist eine sehr gute
Einfuehrung in STL von zwei kompetenten Autoren: Musser ist Co-Autor
der HP STL Implementation und hat die Grundlagen fuer "Generic
Programming" gelegt, Saini ist Autor der ersten kommerziellen STL
Implementation: Modena STL).
Die Alternative zu 'char*' (zumindest fuer den gaengigen Gebrauch als
String) gibt es dagegen schon laenger (siehe etwa Plauger's "The
(Draft) Standard C++ Library", Prentice Hall): Die Klasse 'string'.
Deren Aufbau hat sich allerdings noch geandert (ist deutlich flexibler
geworden, indem noch mit Templates rumhantiert wird). Haken an 'string'
(und auch an STL) ist leider, dass es noch nicht in allen
Compiler/Libraries enthalten ist (derzeit sind die meisten Compiler
noch nicht in der Lage, alle C++ Features zu unterstuetzen, die fuer
STL noetig sind...). Aber es gibt beides (die Klasse 'string' und STL)
in verschiedenen Varianten kostenlos im Netz (sie C++ FAQ und libg++)
oder, falls man Wert darauf legt was zu bezahlen, von kommerziellen
Anbietern (etwa ObjectSpace und Modena).
: Da haett ich jetzt gleich eine Frage dazu. Verzeiht, wenn sie nicht zum Thema
: passt. Wie uebergebe ich denn einen String als Argument einer Funktion? Mein
: Buchautor beschreibt das so:
: #include<string.h>
: void f(char* s) {
: char a[50];
: strcpy(a, s);
: };
: int main() {
: f("Das ist ein String");
: return 0;
: }
Sieht man davon ab, dass '#include <string.h>' kein Standard C++ ist
(die Standard-Variante '#include <cstring>' wird aber derzeit von kaum
einem Compiler unterstuetzt), dann ist das ungefaehr das, was die
meisten wohl auch machen werden (abgesehen von 'const' Modifiern). Mit
'string' sieht das selbe Beispiel etwa so aus (compilierbar z.B. mit
gcc-2.7.2 und libg++-2.7.1):
// The following line would read '#include <bastring.h>' with some
// compilers/libraries...
#include <string>
void f(string const &s)
{
string a(s);
//...?
}
int main()
{
f("Das ist ein String");
return 0;
}
(Immerhin hat der Autor es geschafft, das nicht-portable 'void main()'
zu vermeiden. Das erscheint mir derzeit fuer eine ziemliche Leistung:
In ca. 50% der Artikel, die 'main' enthalten ist es eine Funktion, die
'void', also nichts, liefert).
: Ich hab das zwar auch nicht fuer eine elegante Loesung gehalten, hab aber
: leider nix anderes gefunden. Kennt bei dieser Gelegenheit jemand ein *gutes*
: C++ Buch, welches *sauberes* C++ Programmieren beibringt? Meins ist "Das
: grosse Buch zu C++" von Data Becker. War das einzige im Kaufhaus, und bereits
: das zweite Uebungsbeispiel hab ich eleganter als der Autor geloest...
Wenn irgendjemand ein C++ Tutorial kennt, dass 'vector' anstatt
built-in Arrays und 'string' anstatt 'char*' oder 'char const *'
verwendet, dann waere ich an sowas auch sehr interessiert (ich kann
zwar C++ programmieren, bin aber an einem guten C++ Buch zum
weiterempfehlen interessiert). Derzeit ist mir kein C++ (Einfuehrung-)
Buch bekannt, dass ich fuer vernuenftig halte (ein Indiz, dass meine
Meinung nicht brauchbar ist? Ich denke nicht: Ich kenne kein C++
Tutorial, dass STL verwendet. Die Leute sind einfach noch nicht up to
date. STL ist einfach noch zu neu). Grundsaetzlich wuerde ich uebrigens
eher unter den englischen Buechern gucken: Da es davon mehr gibt, ist
die Wahrscheinlichkeit hoeher, dass was vernuenftiges darunter ist. Das
Buch von Lippman wird uebrigens recht haeufig empfohlen. Allerdings
habe ich es selbst nicht gelesen (es erfuellt sicher nicht die
Kriterien, die ich stellen wuerde, um es auf jeden Fall
weiterzuempfehlen).
Auf jeden Fall reicht ein Buch ueber C++ nicht aus, um mit C++ vertraut
zu werden. Dazu sind noch eine Reihe weiterer Buecher noetig. Wenn
Bedarf besteht, kann ich eine kommentierte Liste von Buechern, die ich
fuer empfehlenswert halte, posten.
--
dietmar.kuehl@uni-konstanz.de
http://www.informatik.uni-konstanz.de/~kuehl
I am a realistic optimist - that's why I appear to be slightly pessimistic
Technical Details
Message-ID:
<4gkjtq$o89@news.BelWue.DE>Path:
arc1-ca.pugleaf.net!news.belwue.de!uzwil!kuehlReferences:
<3120B25C.2650@fokus.gmd.de> <31229576.0@news.uni-konstanz.de> <pu91i3yvzc.fsf@themroc.colibri.de> <4gimln$hqn@pacifica.access.ch>Show Full Headers
Complete Article Headers
Path: arc1-ca.pugleaf.net!news.belwue.de!uzwil!kuehl From: kuehl@uzwil.informatik.uni-konstanz.de (Dietmar Kuehl) Newsgroups: de.comp.lang.c++ Subject: Re: Q: gcc 2.7.1: Aufruf einer Konstruktormethode aus einer anderen Date: 23 Feb 1996 14:45:14 GMT Organization: Fakultät für Mathematik und Informatik Message-ID: <4gkjtq$o89@news.BelWue.DE> References: <3120B25C.2650@fokus.gmd.de> <31229576.0@news.uni-konstanz.de> <pu91i3yvzc.fsf@themroc.colibri.de> <4gimln$hqn@pacifica.access.ch> Reply-To: dietmar.kuehl@uni-konstanz.de NNTP-Posting-Host: uzwil.informatik.uni-konstanz.de X-Newsreader: TIN [version 1.2 PL2]