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">
C++ abgeleitete Klassen
Re: C++ abgeleitete Klassen
> 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>
> 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>
Re: C++ abgeleitete Klassen
Hi,
wenn man Objekte dynamisch erzeugen will, braucht man nunmal Zeiger.
Gruß,
hjb
wenn man Objekte dynamisch erzeugen will, braucht man nunmal Zeiger.
Gruß,
hjb
Pro-Linux - warum durch Fenster steigen, wenn es eine Tür gibt?
Zeiger gegen Referenzen
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
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
Re: C++ abgeleitete Klassen
> 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.
> 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.