Desktruktor, abgeleitet Klasse

Schnelle objektorientierte, kompilierende Programmiersprache.
Benutzeravatar
naums
Beiträge: 740
Registriert: Sa Jan 02, 2010 10:40 pm
Kontaktdaten:

Desktruktor, abgeleitet Klasse

Beitrag von naums » So Jun 09, 2013 10:23 am

Hallo.

Beispielshaft folgender Code:

Code: Alles auswählen

class list1
{
    public: 
        ~list1();
};

class list2 : public list1
{
    public:
        node* first;
        ~list2();
};

class node
{
    public:
        node* next;
}
Man gehe davon aus, dass list2 eine gültiger Listenkopf sei, und n nodes enthielte, die gültig miteinander verkettet sind.

Die Frage: Beim Löschen von einem List2-Objekt wird dann automatisch auch der Destruktor von List1 aufgerufen? Wenn ja, wie verhindere ich das?

MfG
.globl truth
truth:
mov r0, #42
mov pc, lr

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Desktruktor, abgeleitet Klasse

Beitrag von Xin » So Jun 09, 2013 11:02 am

naums hat geschrieben:Die Frage: Beim Löschen von einem List2-Objekt wird dann automatisch auch der Destruktor von List1 aufgerufen? Wenn ja, wie verhindere ich das?
Frage 1: Natürlich. List2 ist eine spezialisierung von List1. Was immer aufgebaut werden muss, um eine List 1 aufzubauen, musst Du auch aufbauen, um eine List2 aufzubauen - denn LIst2 ist eine List1. Zusätzlich baust du auf, was im Konstruktor von LIst 2 steht.
Und genauso beim Abbauen.

Das kannst Du nicht verhindern, denn genau das ist ja, was Du aufgrund der Ableitung aussagst: List2 ist ein List1.

Wenn Du das verhindern möchtest, solltest Du eine andere Aussage treffen, zum Beispiel, List2 erbt nicht von List1 und hat im Prinzip auch nix damit zu tun.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
naums
Beiträge: 740
Registriert: Sa Jan 02, 2010 10:40 pm
Kontaktdaten:

Re: Desktruktor, abgeleitet Klasse

Beitrag von naums » So Jun 09, 2013 11:06 am

okay. Danke. Also wäre es tatsächlich intelligenter gewesen list2 nicht von list1 abzuleiten. Im Nachhinein ist man immer schlauer. danke.

MfG
.globl truth
truth:
mov r0, #42
mov pc, lr

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Desktruktor, abgeleitet Klasse

Beitrag von Xin » So Jun 09, 2013 11:21 am

naums hat geschrieben:okay. Danke. Also wäre es tatsächlich intelligenter gewesen list2 nicht von list1 abzuleiten. Im Nachhinein ist man immer schlauer. danke.
Das kommt drauf an... List1 wird vermutlich eine sehr elementare Form einer Liste sein.
Wenn List2 eine Spezialisierung ist, dann sollte sie auch von List1 erben.

Keine Ahnung, was Du da formulieren willst, aber solange es dem Beispielcode entspricht, solltest Du erstmal die Frage klären, wieso der Destruktor von List1 nicht ausgeführt werden darf.

Vielleicht sollte List1 auch von List2 erben, weil List1 in Wirklichkeit die Spezialisierung von List2 ist? Ich kenne Dein Design ja nicht...
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
naums
Beiträge: 740
Registriert: Sa Jan 02, 2010 10:40 pm
Kontaktdaten:

Re: Desktruktor, abgeleitet Klasse

Beitrag von naums » So Jun 09, 2013 7:51 pm

List1 ist eine normale Liste, list2 eine Ringliste. Und genau da ist das Problem.

An der Stelle war es einfach nicht ganz so clever mir die Zeit zu sparen und abzuleiten. Zumal wirklich Zeit gespart habe ich auch nicht. Naja... egal.
.globl truth
truth:
mov r0, #42
mov pc, lr

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Desktruktor, abgeleitet Klasse

Beitrag von Xin » So Jun 09, 2013 8:15 pm

naums hat geschrieben:List1 ist eine normale Liste, list2 eine Ringliste. Und genau da ist das Problem.
An der Stelle war es einfach nicht ganz so clever mir die Zeit zu sparen und abzuleiten. Zumal wirklich Zeit gespart habe ich auch nicht.
Ableitungen würde gehen, Du müsstest allerdings viele Funktionen virtuell gestalten und für die Ringliste neu implementieren.
Du kannst die Verwandtschaft also schon leisten, aber der eigentliche Programmieraufwand wäre nicht geringer.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
naums
Beiträge: 740
Registriert: Sa Jan 02, 2010 10:40 pm
Kontaktdaten:

Re: Desktruktor, abgeleitet Klasse

Beitrag von naums » Mo Jun 10, 2013 6:56 am

Ah. dafür ist virtual also da :) In C# gibts ein override, was andersrum funktioniert. Naja. Ich habe dann auch das : public list1 entfernt und eine Member first zu list1 hinzugefügt und es lief ohne weitere Probleme. Es war also einfach nicht sonderlich clever diesmal. Aber meine Zeit kommt noch. Muss ich virtual bei list2 und list1 einsetzen oder nur list1?
.globl truth
truth:
mov r0, #42
mov pc, lr

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Desktruktor, abgeleitet Klasse

Beitrag von Xin » Mo Jun 10, 2013 8:50 am

naums hat geschrieben:Ah. dafür ist virtual also da :) In C# gibts ein override, was andersrum funktioniert. Naja. Ich habe dann auch das : public list1 entfernt und eine Member first zu list1 hinzugefügt und es lief ohne weitere Probleme. Es war also einfach nicht sonderlich clever diesmal. Aber meine Zeit kommt noch. Muss ich virtual bei list2 und list1 einsetzen oder nur list1?
Och, wie putzig, ein Informatiker macht die ersten Schritte in objektorientierter Programmierung ;-)

Du solltest vielleicht C++ lernen. ^^
Schau doch mal hier unter dem Kapitel "Objektorientierte Programmierung". Da ist das ganze hergeleitet und erklärt.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

GilbertDur
Beiträge: 105
Registriert: Fr Mär 01, 2013 10:31 am

Re: Desktruktor, abgeleitet Klasse

Beitrag von GilbertDur » Mo Jun 10, 2013 11:48 am

naums hat geschrieben:In C# gibts ein override, was andersrum funktioniert.
Wieso andersrum?

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Desktruktor, abgeleitet Klasse

Beitrag von Xin » Mo Jun 10, 2013 12:12 pm

GilbertDur hat geschrieben:
naums hat geschrieben:In C# gibts ein override, was andersrum funktioniert.
Wieso andersrum?
Weil override nicht an der Funktion geschrieben wird, die überschrieben werden soll, sondern die überschrieben wird.

@naums: In C++11 gibt's override auch.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Antworten