🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: de.comp.lang.c++
Article #1195

Re: Ueberladen ... Problem ... Dringend

#1195
From: Karsten Baensch
Date: Tue, 09 Jan 1996 07:19
148 lines
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!news
References: <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