Operatoren in C++ Überlagern. operator=

Hi Leute.

Ich habe eine Klasse geschrieben die u.a. Dynamisch speicher verwaltet. Ich habe nun einen Kopierkonstruktor angelegt. Nun legte ich zwei Objecte aber Dynamisch an, so das ich den Zeiger auf das Object habe. Wenn ich nun mit
Ini * a;
Ini * b;

a = new Ini[1];
b = new Ini[1];

a = b;

das Object kpieren will, fall ich auf die Nase weil nur die Adresse des Objectes selbst kopiert wird. Nun schrieb ich eine

oprator= Methode die als Parameter nicht & Ini bekommt, sondern * Ini bekommen soll.

Jedoch interessiert das den Compiler in keinster weise.

Kann ich den = Operator so üpberlagern das
er auch bei Zeigern vom Object Funktioniert ?

Gruß

  • Micha -

Hallo !

warum schreibst Du nicht einfach.

(*a)=(*b);

Hallo !

warum schreibst Du nicht einfach.

(*a)=(*b);

Mach ich ja. Die Klammern kann man auch wegöassen. Aber wie ich mich kenne-schreib ich irgendwann mal a=b :wink:
Es geht mir darum, egal ob es nur ein Zeiger ist oder das Object selbst, immer eine zuweisung zu haben, oder dem Anwender meines Objectes garkeine Chance zu geben eine falsche zuweisung zu machen.

Ich hab sehr wenig Infos zu C++ :frowning:(

Hallo

Dann musst Du eben noch den Operator = fuer 2 Zeiger auf Dein Object ueberladen. Ob das aber Sinn macht ???

Andreas

Naja, ich hab die Funktion für zwei Zeiger überladen. Aber, jetzt kommt das wo ich das Problem mit hab:

Das jugt den Compiler nicht. Er weist dennoch einfach die Adresse zu.

(Getestet mit StormC Maxon C Borland C (4 - 5 C++ Builder).

Hatte 4h nach dem Fehler gesucht… Die Operatoren waren Überlagert und dennoch stürzte das Programm durch zweimaliges Freigegeben des Speichers ab :frowning:

Aber mal ne andere frage:

Gibt es als Text irgendwie eine sammlung der standartobjecte ? So wie ios etc. ? Ich leb hier von den Include Files und bis ich mir ein Buch zulegen kann vergeht noch ne weile.

TNX im vorraus

  • Micha-

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo !

Naja, ich hab die Funktion für zwei
Zeiger überladen. Aber, jetzt kommt das
wo ich das Problem mit hab:

Das jugt den Compiler nicht. Er weist
dennoch einfach die Adresse zu.

Habe ich zwar jetzt auf die Schnelle nicht ausprobiert, aber ich glaube Dir das. Operatoren fuer grundlegende Typen kann man naemlich nicht ueberladen. Versuch mal + fuer int zu ueberladen-> geht nicht. Da kommt aber wenigstens ein Compilerfehler. Vielleicht betrachten die Compiler alle Zeiger als solche grundlegenden Datentypen, die nicht ueberladen werden koennen. Alle Zeiger sind ja eigentlich gleich.
Ich habe aber noch nicht verstanden, warum Du unbedingt das Zeiger = ueberladen willst, und das *a=*b nicht reicht.

(Getestet mit StormC Maxon C Borland C (4

  • 5 C++ Builder).

Viele Gruesse!

Andreas

Hi Micha :smile:

Was du vor hast kann nicht funktionieren. Der Zuweisungsoperator bei

Ini * a;
Ini * b;

a = b;

ist das globale „=“. Der Compiler ruft hier die Member-Funktion „operator=()“ überhaupt nicht auf!

Du müsstest den Zuweisungsoperator GLOBAL überladen. Das ist aber nicht möglich. Der globale Zuweisungsoperator kopiert immer bitweise, daran kannst du nichts machen …

cu Stefan.

Naja, ich setze mein Object irgendwann ein - hab es irgendwo als Zeiger rumliegen und weise es dann mit = zu um dann wieder stundenlang nach dem Fehler zu suchen :wink:

Der Fehler ist schwer auffindbar, vorallem wenn es etwas verschachtelt ist. Dafür sind die folgen sehr gemein…

Danke für die Infos!

  • Micha-

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

TNX für die Info :smile: Ich hab mich nun an den Gedanken gewöhnt und die ersten Objecte stehen:smile:

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]