Article View: de.comp.lang.c++
Article #2178vector, einige Fragen
From: Andreas Zierdt
Date: Thu, 18 Apr 1996 16:05
Date: Thu, 18 Apr 1996 16:05
58 lines
3342 bytes
3342 bytes
Für meine Arbeit an der Uni habe ich u.a. eine Klasse "Vector"
entwickelt; ich bin dabei auf verschiedene Probleme gestossen, die ich
hier in Form von drei Fragen zusammenfasse:
1. Ein Vektor im mathematischen Sinne ist ein Element einer Menge (des
Vektorraums), für die bestimmte Axiome erfüllt sind. In der Physik sind
das z.B. gerichtete Größen wie Kräfte, aber auch abstrakte Gebilde wie
Zustandsvektoren. Ich bin mir nun nicht sicher inwieweit der Begriff
"vector" im Sinne von C++ dieser Definition entspricht. Mein Eindruck ist
das hier vector im Sinne von "objectorientiertes array" verwendet wird.
Falls das stimmt, halte ich es für eine unglückliche Namensgebung. Die
Frage lautet dann: wie sollte eine Klasse von "richtigen" Vektoren heißen?
2. Für meine Vector-Klasse habe ich folgende Konstruktoren definiert:
Vector(unsigned int dimension=3);
Vector(const Vector& v);
Vector(const Matrix<T>& Ma);
Nun stellt sich die Frage, wie kann ich konstante Vektoren erzeugen?
"Vector(unsigned int dimension=3)" erlaubt mir keine Startwerte vorzugeben
und eine spätere Zuweisung an const-Objekte ist ja nicht möglich. Da die
Dimension des Vektors unbekannt ist, käme nur etwas in der Form
"Vector(unsigned int dimension=3, double ...)" in Frage. Die Verwendung der
Ellipse ist aber nicht nur unschön, sie Verhindert auch die Verwendung einer
Initialisiererliste im Konstruktor. (oder?)
Eine Initialisiererliste ist aber erforderlich, wenn die Datenelemente als
const deklariert werden, oder ist ein const Objekt mit nicht const Daten
möglich/sinnvoll?
3. Für die Fehlerbehandlung verwende ich eine eingebettete Klasse:
struct Vector_Error
{
Vector_Error(int n, const Vector& orig) : Nr(n), ErrOrigin(orig) {}
int Nr;
const Vector& ErrOrigin;
};
Dabei werden in "Nr" Fehlercodes abgelegt (Range, ect.) die im Fehlerhandler
wieder dekodiert werden müssen, was einen gewissen overhead erzeugt. Eine
Alternative wäre eine eigene Klasse für jede Fehlerursache, nur kann ich dann
Vektor-Fehler nicht mehr mit einem catch() abfangen, sondern muß 5 oder 10
verwenden. Oder ich gebe die Einbettung auf und verwende hierachische Fehler-
klassen, dann geht aber die Datenkapselung verloren.
Hier interessiert mich einfach mal, wie ihr es macht.
Gruß
az
P.S. Die OS-spezifischen und off-topic Beiträge haben wirklich unerträglich
zugenommen, IMHO hilft da aber kein rumdirigieren, sondern es müssen wieder
mehr C++ Themen gepostet werden. Im Augenblick könnte man ja glauben, dies
ist eine Windows-Gruppe und dann kommen auch solche Beiträge.
---
Andreas Zierdt, Institut fuer Phonetik und sprachliche Kommunikation
Universitaet Muenchen, Schellingstr. 3
80799 Muenchen, Germany
E-mail: andi@sun1.phonetik.uni-muenchen.de
Technical Details
Message-ID:
<4l5p8l$ol1@sparcserver.lrz-muenchen.de>Path:
arc1-ca.pugleaf.net!linux8.phonetik.uni-muenchen.de!andiShow Full Headers
Complete Article Headers
Path: arc1-ca.pugleaf.net!linux8.phonetik.uni-muenchen.de!andi From: andi@linux8.phonetik.uni-muenchen.de (Andreas Zierdt) Newsgroups: de.comp.lang.c++ Subject: vector, einige Fragen Date: 18 Apr 1996 16:05:41 GMT Organization: Phonetik Distribution: world Message-ID: <4l5p8l$ol1@sparcserver.lrz-muenchen.de> Reply-To: andi@sun1.phonetik.uni-muenchen NNTP-Posting-Host: linux8.phonetik.uni-muenchen.de X-Newsreader: TIN [version 1.2 PL2]