Article View: de.comp.lang.c++
Article #1195Re: Ueberladen ... Problem ... Dringend
From: Karsten Baensch
Date: Tue, 09 Jan 1996 07:19
Date: Tue, 09 Jan 1996 07:19
148 lines
5078 bytes
5078 bytes
semb2204@hp00.rz.tu-harburg.de (Marco Budde) writes:
>From: Marco_Budde@p15.f5200.n240.z2.fido.sub.org (Marco Budde)
>Newsgroups: fido.ger.c_plusplus
>Subject: Problem beim Ueberladen!
>Date: Thu, 04 Jan 1996 21:41:00 +0200
>Organization: Grundgesetz fuer Windows
>Message-ID: <MSGID_2=3A240=2F5200.15_c0199c7a@fidonet.org>
>Moin Moin!
>Ich habe da ein ziemlich grosses Problem. Mein Informatikprof. hatte
>irgendwie das Verlangen, uns in einer Vorlesungsstunde die komplette C++
>Programmierung zu zeigen ;-)! Jetzt sollen wir ein Programm abliefern,
>dass massenhaft Operatoren ueberlaedt. Leider bekomme ich das absolut
>nicht hin. Ich habe hier zwar ein C++ Buch von Schumann liegen, aber
>irgendwie scheint der Autor selbst keinerlei Ahnung von C++ zu haben. Ich
>hoffe mir kann hier jemand das Uberladen mal genauer erklaeren. Was mir
>absolut nicht klar ist: muss ich fuer die Rueckgabe erst eine Kopie das
>Objekts erzeugen oder wie greife ich auf dieses Objekt zu?
>Dieses Codefragment ist gegeben:
>class vektor
>{
> int *pointer;
> int dimension;
> public:
> vektor (int anzahl_elemente);
> ~vektor ();
> vektor (vektor &u);
> vektor &operator= (const vektor &v);
> int &operator[] (int i);
> vektor operator+ (const vektor &u);
> int operator* (const vektor &u);
>};
>vektor::vektor (int anzahl_elemente)
>{
> dimension = anzahl_elemente;
> pointer = new int[anzahl_elemente];
> if (pointer == NULL)
> {
> cout << "Allokationsfehler" << endl;
> exit (EXIT_FAILURE);
> }
>}
Hallo,
bis hier hin siehts erstmal ganz vernuenftig aus.
>Nun sollen die restlichen Funktionen realisiert werden (insbesondere den
>Destruktor, die Vektoraddition und die Skalarmultiplikation). Den
>Desktruktor habe ich ja noch hinbekommen, aber der Rest ...
>vektor::~vektor (void)
>{
> delete pointer;
>}
Selbst der Destruktor ist nicht ganz korrekt. Es muss heissen:
vektor::~vektor()
{
delete[] pointer;
}
(Fuer den Fall des int-Arrays haette der 'normale' delete-Operator
vielleicht auch funktioniert. Aber stelle Dir ein mit new[] angelegtes
Array selbstdefinierten Typs vor! Dann wuerde mit delete ohne[] nur das
erste Element beseitigt werden!)
Ich will Dir natuerlich nicht Deine Arbeit abnehmen :-(, Du sollst ja auch was
dabei lernen 8-)! Also gebe ich Dir 'nur' ein paar Hinweise, wie Deine Funktionen
realisiert werden sollten.
vektor::vektor(const vektor &u)
{
// Copy Constructor. Kopiere die Dimension,
// Allokiere soviele Elemente wie im Original,
// Kopiere alle Elemente des Originals
}
>vektor& vektor::operator = (const vektor &v)
>{
> int i;
> for (i=0 ; i < v.dimension ; i++)
> pointer[i] = v.pointer[i];
> return (*this);
>}
Also so einfach isses nich! Sondern:
vektor& vektor::operator= (const vektor &v)
{
// Assignment Operator.
// Beseitige 'mein' altes Array
// uebriges siehe Kopierkonstruktor
}
int& vektor::operator[] (int i)
{
// Subscription Operator.
// Indiziere 'mein' Array mit i
// und liefere den dort gespeicherten Integer
// zurueck
}
vektor operator+ (const vektor &u)
{
// Ueberlege Dir, was Du im Falle der
// Nicht-Uebereinstimmung der Vektor-
// Dimensionen machen willst!
// Dann: Erzeuge lokales vektor-Objekt mit
// entsprechender Dimension
// Belege die Elemente des lokalen Vektors mit
// den Werten der skalaren Additionen
// Liefere eine Kopie des lokalen vektors zurueck
// (also nicht per Referenz!)
}
int operator* (const vektor &u)
{
// Ueberlege Dir, was Du im Falle der
// Nicht-Uebereinstimmung der Vektor-
// Dimensionen machen willst!
// Berechne das Skalarprodukt und liefere den
// Wert als Kopie zurueck.
}
>Ich hoffe wirklich, dass ihr mir helfen koennt.
Kritik an den Professor!
C++ kann man nicht mal einfach eben lernen. Es ist eine
der schwersten Sprachen ueberhaupt! Manche behaupten, C++ sei
keine Programmiersprache, sondern eine Philosophie. Selbst, wenn
Du die Syntax beherrschen lernst, kannst Du C++ noch lange nicht
in einem ernsthaften Projekt einsetzen.
Uebrigens: An der TU in Chemnitz gibts u.a. auch zu diesem Thema
extra Vorlesungen, Praktika, Kurse vom Rechenzentrum etc.! Also
warum Zeit verschwenden ;-) ? Die Wohnheimplaetze warten...;-)
Viel Spass
Karsten
--
( Email: Karsten.Baensch@hrz.tu-chemnitz.de (
) WWW: http://www.tu-chemnitz.de/~kba/baensch.html )
( Phone: (+49-) 0371/531-1252 (
) Mail: Technical University, Computing Services, 09107 Chemnitz, Germany )
Technical Details
Message-ID:
<4ctel8$fv8@pyrrhus-f.hrz.tu-chemnitz.de>Path:
arc1-ca.pugleaf.net!news.tu-chemnitz.de!newsReferences:
<4cqs22$2ou@rztsun.tu-harburg.de>Show Full Headers
Complete Article Headers
Path: arc1-ca.pugleaf.net!news.tu-chemnitz.de!news From: kba@hrz.tu-chemnitz.de (Karsten Baensch) Newsgroups: de.comp.lang.c++ Subject: Re: Ueberladen ... Problem ... Dringend Date: 9 Jan 96 07:19:34 GMT Organization: University of Technology Chemnitz, FRG Message-ID: <4ctel8$fv8@pyrrhus-f.hrz.tu-chemnitz.de> References: <4cqs22$2ou@rztsun.tu-harburg.de> NNTP-Posting-Host: shark.hrz.tu-chemnitz.de