C++ abgeleitete Klassen

Post Reply
Message
Author
bakunin
Posts: 597
Joined: 16. Aug 1999 6:44
Location: Lorsch (Südhessen)
Contact:

C++ abgeleitete Klassen

#1 Post by bakunin »

Hallo!

Nehmen wir an, es sei die Klasse "ober" gegeben, die nur ein Interface definiert und es würden mehrere Klassen davon abgeleitet, z.B. eine Namens "unter":
<blockquote><pre><font size="1" face="">code:</font><hr><font face="Courier New" size="2">
class ober
{
public:
virtual int bar (int i) = 0;
};

class unter: public ober
{
public:
int bar (int i) { return i + 1; }
};
</font><hr></pre></blockquote>
Nun möchte ich mit Objekte arbeiten, die von "ober" abgeleitet sind, egal um welche abgeleitete Klasase es sich handelt. Ein solches Objekt kann so erstellt und verwendet werden:

ober *qux = new unter;
std::cout << qux->bar (1) << endl;
delete qux;

Schön und gut, aber wenn ich schon in C++ programmiere, dann möchte ich Zeiger vermeiden. Ich möchte das gleiche mit einer Referenz realisieren (oder ist es üblich, in diesem Fall Zeiger zu verwenden?). Das funktioniert so:

ober &qux = *(new unter);

Ich frage mich aber, ob es da nicht eine schönere/bessere/gängigere Lösung gibt, weil das sieht in meinen Augen etwas komisch aus.

Grüße von Wolfgang, der unbedingt "ordentlich" programmieren will <img src="http://www.pl-forum.de/UltraBoard/Images/Happy.gif" border="0" align="middle">

User avatar
heinrich
Posts: 219
Joined: 22. Sep 1999 11:22
Location: N49.137 E8.544

Re: C++ abgeleitete Klassen

#2 Post by heinrich »

> Schön und gut, aber wenn ich schon in C++ programmiere, dann möchte ich
> Zeiger vermeiden. Ich möchte das gleiche mit einer Referenz realisieren
Eine Frage: Warum _keine_ Zeiger ?

Selbst in Java wird es so realisiert, wie du es mit C skizziert hast. (ok ok in java dann mit abstrakter klasse...)

> ober* variable = new unter;
schaut doch gut aus...

> ober& variable = *(new unter);
iiiiieehhh wie hässlich.... <img src="http://www.pl-forum.de/UltraBoard/Images/Wilk.gif" border="0" align="middle">

<blockquote><pre><font size="1" face="">code:</font><hr><font face="Courier New" size="2">
abstract class ober {
abstract int bar(int i);
}

class unter extends ober {
public int bar(int i) { return (i+1); }
}

public class test {
public static void main(String args[]) {
ober variable = new unter();
System.out.println( variable.bar(3) );
}
}
</font><hr></pre></blockquote>

User avatar
hjb
Pro-Linux
Posts: 3264
Joined: 15. Aug 1999 16:59
Location: Bruchsal
Contact:

Re: C++ abgeleitete Klassen

#3 Post by hjb »

Hi,

wenn man Objekte dynamisch erzeugen will, braucht man nunmal Zeiger.

Gruß,
hjb
Pro-Linux - warum durch Fenster steigen, wenn es eine Tür gibt?

bakunin
Posts: 597
Joined: 16. Aug 1999 6:44
Location: Lorsch (Südhessen)
Contact:

Zeiger gegen Referenzen

#4 Post by bakunin »

Hallo!

Danke für die Antworten. Ich bin zwar durchaus in der Lage, das hinzunehmen, aber da ich hier eine Lücke in meinem Wissen habe, frage ich nochmal nach: Wo ist aus technischer Sicht das Problem mit Referenzen statt Zeigern für dynamisch generierte Objekte?

Grüße von Wolfgang

User avatar
heinrich
Posts: 219
Joined: 22. Sep 1999 11:22
Location: N49.137 E8.544

Re: C++ abgeleitete Klassen

#5 Post by heinrich »

> Wo ist aus technischer Sicht das Problem mit Referenzen statt Zeigern
> für dynamisch generierte Objekte?
Zeiger können dürfen auch mal auf nix (also eigentlich besser: auf NULL) zeigen.
Referenzen müssen dagegen _immer_ auf irgendetwas zeigen.

Post Reply