 |
C++Talk.NET C++ language newsgroups
|
| View previous topic :: View next topic |
| Author |
Message |
Markus Raab Guest
|
Posted: Sun Mar 12, 2006 2:33 pm Post subject: Interfaces |
|
|
Interface ist ein Konzept wo man quasi die Headerdatei schreibt, aber die
Implementierung unterlässt. Dann gibt es dazu implementierende Klassen die
das gleiche Interface implementieren.
So weit so gut, man kann ja bei C++ eigentlich abstrakte Klassen für genau
das gleiche verwenden.
Fehlt iso-C++ irgendwas weil es dieses Konzept nicht unterstützt?
Wie auch immer gibt es mehr oder weniger erbärmliche Versuche dass Konzept
irgendwie noch reinzuwurschtln. Mit Sachen wie:
#define Interface class
#define DeclareInterface(name) Interface name { \
public: \
virtual ~name() {}
Ernsthafter hat es: http://www.artima.com/weblogs/viewpost.jsp?thread=77842
probiert, mit der Begründung (bei abstr. Klassen) "
1) performance penalties due to superflous dispatching and inability of the
compiler to inline calls where normally it would be appropriate.
2) object size penalties which increase linearlu with the number of
interfaces modeled due to extra vtable pointers within the objects."
Obwohl seine ganzen Ideen irgendwie von der Art sind: Stopfen wir Interfaces
so wie sie in Java sind einfach nach C++. z.b. die Idee "template<class T :
SomeInterface> class SomeClass {", oder gibt es den : Operator um
Anforderungen an Klassen zu stellen in C++ bereits?
Was waren die Beweggründe in Java Mehrfachvererbung bei Klassen nicht zu
unterstützen und nur bei Interfaces (o.t.).
Vielen Dank für Ideen und Anregungen.
mfg Markus
--
http://www.markus-raab.org | Wenn ich etwas weiter sah als andere, so
-o) | deshalb, weil ich auf den Schultern von
Kernel 2.6.15 /\ | Riesen stand. -- Sir Isaac Newton
on a i686 _\_v |
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de |
|
| Back to top |
|
 |
Thomas Maeder Guest
|
Posted: Sun Mar 12, 2006 6:06 pm Post subject: Re: Interfaces |
|
|
Markus Raab <garde@markus-raab.org> writes:
| Quote: | Interface ist ein Konzept wo man quasi die Headerdatei schreibt, aber die
Implementierung unterlässt. Dann gibt es dazu implementierende Klassen die
das gleiche Interface implementieren.
So weit so gut, man kann ja bei C++ eigentlich abstrakte Klassen für genau
das gleiche verwenden.
Fehlt iso-C++ irgendwas weil es dieses Konzept nicht unterstützt?
|
Wieso meinst Du, dass ISO C++ dieses Konzept nicht unterstützt? Wo Du
doch einen Absatz weiter oben das genaue Gegenteil schreibst?
| Quote: | Wie auch immer gibt es mehr oder weniger erbärmliche Versuche dass
Konzept irgendwie noch reinzuwurschtln. Mit Sachen wie:
#define Interface class
#define DeclareInterface(name) Interface name { \
public: \
virtual ~name() {}
|
Wozu?
| Quote: | Ernsthafter hat es:
http://www.artima.com/weblogs/viewpost.jsp?thread=77842 probiert,
mit der Begründung (bei abstr. Klassen) " 1) performance penalties
due to superflous dispatching and inability of the compiler to
inline calls where normally it would be appropriate.
|
Wenn das ein Vergleich mit Java werden soll, dann ist zu bemerken,
dass die Sache eigentlich genau umgekehrt ist. In Java ist *jeder*
Methodenaufruf dynamisch gebunden, d.h. es gibt viel "superflous
dispatching and inability of the compiler to inline calls where
normally it would be appropriate."
In C++ haben wir die Wahl, welche Aufrufe wir dynamisch gebunden haben
wollen.
| Quote: | 2) object size penalties which increase linearly with the number of
interfaces modeled due to extra vtable pointers within the objects."
|
Das Wort "penalties" macht nur Sinn, wenn man die (typische)
C++-Implementation von dynamischer Bindung mit einer Alternative
vergleicht. Was ist hier die Alternative?
| Quote: | Obwohl seine ganzen Ideen irgendwie von der Art sind: Stopfen wir Interfaces
so wie sie in Java sind einfach nach C++. z.b. die Idee "template<class T :
SomeInterface> class SomeClass {", oder gibt es den : Operator um
Anforderungen an Klassen zu stellen in C++ bereits?
|
Nein, das gibt es nicht. Was es gibt, sind "concept checks".
| Quote: | Was waren die Beweggründe in Java Mehrfachvererbung bei Klassen
nicht zu unterstützen und nur bei Interfaces (o.t.).
|
Das musst Du wohl in einer Newsgroup zu Java fragen.
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de |
|
| Back to top |
|
 |
Stefan Ram Guest
|
|
| Back to top |
|
 |
Marcel Müller Guest
|
Posted: Sun Mar 12, 2006 7:06 pm Post subject: Re: Interfaces |
|
|
Markus Raab wrote:
| Quote: | Interface ist ein Konzept wo man quasi die Headerdatei schreibt, aber die
Implementierung unterlässt. Dann gibt es dazu implementierende Klassen die
das gleiche Interface implementieren.
So weit so gut, man kann ja bei C++ eigentlich abstrakte Klassen für genau
das gleiche verwenden.
Fehlt iso-C++ irgendwas weil es dieses Konzept nicht unterstützt?
|
Nein
| Quote: | Wie auch immer gibt es mehr oder weniger erbärmliche Versuche dass Konzept
irgendwie noch reinzuwurschtln. Mit Sachen wie:
#define Interface class
#define DeclareInterface(name) Interface name { \
public: \
virtual ~name() {}
|
Defines sind Geschmackssache.
Wenn man statt "class" "struct" nimmt, kann man sich das "public:" sparen.
Beim Implementieren aber bitte das "virtual" nicht vergessen, sonst gibt
es Ärger, wenn man ein Interface über Vererbung mehrfach implementiert.
Marcel
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de |
|
| Back to top |
|
 |
Marcel Müller Guest
|
Posted: Sun Mar 12, 2006 7:06 pm Post subject: Re: Interfaces |
|
|
Thomas Maeder wrote:
| Quote: | Wenn das ein Vergleich mit Java werden soll, dann ist zu bemerken,
dass die Sache eigentlich genau umgekehrt ist. In Java ist *jeder*
Methodenaufruf dynamisch gebunden, d.h. es gibt viel "superflous
dispatching and inability of the compiler to inline calls where
normally it would be appropriate."
|
Das stimmt auch nicht.
In Java ist der virtuelle Aufruf eben default. In C++ der normale. Wenn
man in Java keinen virtuellen Aufruf haben will, muss man final schreiben.
| Quote: | In C++ haben wir die Wahl, welche Aufrufe wir dynamisch gebunden haben
wollen.
|
Java dito. Es gibt in diesem Punkt erstmal keinen Unterschied.
Marcel
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de |
|
| Back to top |
|
 |
Rolf Magnus Guest
|
Posted: Sun Mar 12, 2006 7:06 pm Post subject: Re: Interfaces |
|
|
Markus Raab wrote:
| Quote: | Interface ist ein Konzept wo man quasi die Headerdatei schreibt, aber die
Implementierung unterlässt. Dann gibt es dazu implementierende Klassen die
das gleiche Interface implementieren.
So weit so gut, man kann ja bei C++ eigentlich abstrakte Klassen für genau
das gleiche verwenden.
Fehlt iso-C++ irgendwas
|
Nein.
| Quote: | weil es dieses Konzept nicht unterstützt?
|
Wieso? Tut es doch - wie du schon oben schreibst - in Form von abstrakten
Basisklassen. Die sind halt etwas flexibler als z.B. die Java-Interfaces,
was ich aber eher als Vorteil empfinde.
| Quote: | Wie auch immer gibt es mehr oder weniger erbärmliche Versuche dass Konzept
irgendwie noch reinzuwurschtln. Mit Sachen wie:
#define Interface class
#define DeclareInterface(name) Interface name { \
public: \
virtual ~name() {}
|
Das Konzept ist schon da. Die Versuche wollen es nur krampfhaft in eine
andere Syntax pressen. Sieht für mich nach dem Versuch aus, C++ so zu
verändern, daß es wie Java ist. Einfachste Lösung: Java statt C++
verwenden.
| Quote: | Ernsthafter hat es:
http://www.artima.com/weblogs/viewpost.jsp?thread=77842 probiert, mit der
Begründung (bei abstr. Klassen) " 1) performance penalties due to
superflous dispatching and inability of the compiler to inline calls where
normally it would be appropriate.
2) object size penalties which increase linearlu with the number of
interfaces modeled due to extra vtable pointers within the objects."
Obwohl seine ganzen Ideen irgendwie von der Art sind: Stopfen wir
Interfaces so wie sie in Java sind einfach nach C++. z.b. die Idee
"template<class T : SomeInterface> class SomeClass {", oder gibt es den :
Operator um Anforderungen an Klassen zu stellen in C++ bereits?
Was waren die Beweggründe in Java Mehrfachvererbung bei Klassen nicht zu
unterstützen und nur bei Interfaces (o.t.).
|
Vermutlich sollte es eine Vereinfachung sein. Ich sehe es eher als
Einschränkung, daß ich einem Interface gar keine Default-Implementierungen
mitgeben kann.
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de |
|
| Back to top |
|
 |
Markus Raab Guest
|
Posted: Sun Mar 12, 2006 11:06 pm Post subject: Re: Interfaces |
|
|
Rolf Magnus wrote:
| Quote: | Markus Raab wrote:
Interface ist ein Konzept wo man quasi die Headerdatei schreibt, aber die
Implementierung unterlässt. Dann gibt es dazu implementierende Klassen
die das gleiche Interface implementieren.
So weit so gut, man kann ja bei C++ eigentlich abstrakte Klassen für
genau das gleiche verwenden.
Fehlt iso-C++ irgendwas
Nein.
|
Schön sehe ich auch so. Wollte nur ein wenig provokanter zur Diskussion
anregen;)
| Quote: | weil es dieses Konzept nicht unterstützt?
Wieso? Tut es doch - wie du schon oben schreibst - in Form von abstrakten
Basisklassen. Die sind halt etwas flexibler als z.B. die Java-Interfaces,
was ich aber eher als Vorteil empfinde.
|
In einem Buch über UML (also jetzt rein modellierungstechnisch) steht als
Vorteil bei Interfaces dass zwischen dem Interface und der realisierenden
Klasse keinerlei Verwanschaft gefordert sei.
Aber ansonsten bestätigst du meinen Verdacht: abstrakte Klassen sind die
Verallgemeinerung und umfassen auch Interfaces. Stimmt das so?
| Quote: | Wie auch immer gibt es mehr oder weniger erbärmliche Versuche dass
Konzept irgendwie noch reinzuwurschtln. Mit Sachen wie:
#define Interface class
#define DeclareInterface(name) Interface name { \
public: \
virtual ~name() {}
Das Konzept ist schon da. Die Versuche wollen es nur krampfhaft in eine
andere Syntax pressen. Sieht für mich nach dem Versuch aus, C++ so zu
verändern, daß es wie Java ist.
|
Nein, ich finde es auch ziemlich krampfhaft und habe das auch zuvor
geschrieben. In dem Dokument stand auch ein
#define begin {
Wozu ich kein Wort verlieren muss.
| Quote: | Was waren die Beweggründe in Java Mehrfachvererbung bei Klassen nicht zu
unterstützen und nur bei Interfaces (o.t.).
Vermutlich sollte es eine Vereinfachung sein.
|
Vereinfachung der Sprache aber nicht der Programme?
| Quote: | Ich sehe es eher als
Einschränkung, daß ich einem Interface gar keine Default-Implementierungen
mitgeben kann.
|
Ack
mfg Markus
--
http://www.markus-raab.org | Dort, wo man Bücher verbrennt, verbrennt
-o) | man am Ende auch Menschen. -- H. Heine
Kernel 2.6.15 /\ |
on a i686 _\_v |
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de |
|
| Back to top |
|
 |
Stefan Ram Guest
|
Posted: Mon Mar 13, 2006 12:06 am Post subject: Re: Interfaces |
|
|
Markus Raab <garde@markus-raab.org> writes:
| Quote: | Aber ansonsten bestätigst du meinen Verdacht: abstrakte Klassen
sind die Verallgemeinerung und umfassen auch Interfaces. Stimmt
das so?
|
In Java unterscheidet man ja nicht zwischen dem
Klassenspezifizierer und den Definitionen der Klassenelemente,
sondern schreibt alles in eine Klassendeklaration.
Insofern kann man manchmal den Klassenspezifizierer von C++
auch als eine Art von »Schnittstellenbeschreibung« einer
Klasse ansehen.
Abstrakte Klassen gibt es übrigens auch in Java, allerdings
kann dort eine Klasse direkt nur eine davon erweitern.
| Quote: | Nein, ich finde es auch ziemlich krampfhaft und habe das auch zuvor
geschrieben.
|
Ich sehe Schnittstellen vorwiegend als Weg, um generische
Algorithmen daran zu binden (und sie dadurch von speziellen
Klassen zu entkoppeln).
Das ist in C++ mit Schablonen aber schon möglich, ohne daß man
dabei abstrakte Klassen oder Schnittstellen verwendet, einfach
indem ein Objekt die Elementfunktionen implementiert, welche
der als generische Funktion formulierte Algorithmus
voraussetzt.
In Java kann man solche Schablonen nicht auf diese Weise
schreiben, aber etwas ähnliches ist dann mit Hilfe von
Schnittstellen möglich: Es ist so etwas typstrenger, aber
etwas weniger flexibel.
| Quote: | Ich sehe es eher als Einschränkung, daß ich einem Interface
gar keine Default-Implementierungen mitgeben kann.
Ack
|
Es gibt in Java die informelle Benennungs-Konvention, zu einer
Schnittstelle »List« eine Klasse »DefaultList« zu deklarieren.
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de |
|
| Back to top |
|
 |
Albert Weinert Guest
|
Posted: Mon Mar 13, 2006 3:58 pm Post subject: Re: Interfaces |
|
|
Rolf Magnus schrieb:
| Quote: | Interface ist ein Konzept wo man quasi die Headerdatei schreibt, aber die
Implementierung unterlässt. Dann gibt es dazu implementierende Klassen die
das gleiche Interface implementieren.
[..]
weil es dieses Konzept nicht unterstützt?
Wieso? Tut es doch - wie du schon oben schreibst - in Form von abstrakten
Basisklassen. Die sind halt etwas flexibler als z.B. die Java-Interfaces,
was ich aber eher als Vorteil empfinde.
|
Habe gerade die Java Interfaces nicht auf dem Schirm, aber in C# sind
Interfaces schon ein wenig anderes als abstrakte Basisklassen.
Bei Interfaces brauchst Du erst in der Implemtierung entscheiden ob z.B.
eine Methode virtuell machst oder nicht. Und Interfaces können keine
ausprogrammierte Funktionnalität enhalten. Man kann mehrere Interfaces
in einer Klasse implementieren, diese könnte man in C++ mit
Mehrfachvererbung erreichen.
--
Grüße
Der Albert
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de |
|
| Back to top |
|
 |
Sebastian Biallas Guest
|
Posted: Mon Mar 13, 2006 9:35 pm Post subject: Re: Interfaces |
|
|
Stefan Ram wrote:
| Quote: | Die virtuelle Javamaschine enthält einen
Gerade-rechtzeitig-Optimierer »Hotspot«, der die meisten
Aufrufe durch globales Einreihen (inlining) de-virtualisiert.
|
Du vermischt (wie Sun leider auch) die Sprache Java mit einer virtuellen
Maschine, die Java-Bytecode ausführt.
--
Gruß,
Sebastian
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de |
|
| Back to top |
|
 |
Stefan Ram Guest
|
Posted: Tue Mar 14, 2006 12:06 am Post subject: Re: Interfaces |
|
|
Sebastian Biallas <groups.5.sepp (AT) spamgourmet (DOT) com> writes:
| Quote: | Die virtuelle Javamaschine enthält einen
erade-rechtzeitig-Optimierer »Hotspot«, der die meisten
Aufrufe durch globales Einreihen (inlining) de-virtualisiert.
Du vermischt (wie Sun leider auch) die Sprache Java mit einer
virtuellen Maschine, die Java-Bytecode ausführt.
|
Thomas sprach die Implementation und Übersetzung an:
»es gibt viel "superflous dispatching and inability of the
compiler to inline calls where normally it would be appropriate."«
Ich blieb dann auf diesem Niveau. In Java ist der Compiler
(JIT-Compiler von Byte-Code in Maschinensprache) eben auch
teilweise in der virtuellen Maschine und kann dort sehr spät
optimieren.
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de |
|
| Back to top |
|
 |
Sebastian Biallas Guest
|
Posted: Tue Mar 14, 2006 6:39 am Post subject: Re: Interfaces |
|
|
Stefan Ram wrote:
| Quote: | Sebastian Biallas <groups.5.sepp (AT) spamgourmet (DOT) com> writes:
Die virtuelle Javamaschine enthält einen
erade-rechtzeitig-Optimierer »Hotspot«, der die meisten
Aufrufe durch globales Einreihen (inlining) de-virtualisiert.
Du vermischt (wie Sun leider auch) die Sprache Java mit einer
virtuellen Maschine, die Java-Bytecode ausführt.
Thomas sprach die Implementation und Übersetzung an:
»es gibt viel "superflous dispatching and inability of the
compiler to inline calls where normally it would be appropriate."«
|
Das stammt übrigens aus: http://www.heron-language.com/cpp-iop.html und
war ursprünglich auf C++ bezogen.
Unter "Compiler" verstehe ich in diesem Zitat übrigens den ersten
Compiler, der Binärcode erstellt. Es ist ja leider in C++ tatsächlich
so, dass der Compiler über verschiedenen Übersetzungseinheiten nicht
(oder nur sehr schlecht) optimieren kann.
| Quote: | Ich blieb dann auf diesem Niveau. In Java ist der Compiler
(JIT-Compiler von Byte-Code in Maschinensprache) eben auch
teilweise in der virtuellen Maschine und kann dort sehr spät
optimieren.
|
Das liegt aber nicht an der Sprache Java sondern an der speziellen VM.
Genauso gut könnte man C++-Code auf einem hypothetischen Prozessor
laufen lassen, bei dem virtuelle Methodenaufrufe genauso schnell sind
wie statische.
--
Gruß,
Sebastian
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de |
|
| Back to top |
|
 |
Raymond Haeb Guest
|
Posted: Tue Mar 14, 2006 7:06 am Post subject: Re: Interfaces |
|
|
Albert Weinert wrote:
| Quote: | Habe gerade die Java Interfaces nicht auf dem Schirm, aber in C# sind
Interfaces schon ein wenig anderes als abstrakte Basisklassen.
Bei Interfaces brauchst Du erst in der Implemtierung entscheiden ob z.B.
eine Methode virtuell machst oder nicht. Und Interfaces können keine
ausprogrammierte Funktionnalität enhalten.
|
Heißt das, es gibt Interfaces die abstrakte Funktionen (also "=0")
enthalten die nicht virtuell sind? Wenn man dann einen Zeiger auf
ein Objekt hat welches ein solches interface implementiert und damit
eine solche Funktion aufrufen will, welche wird dann tatsächlich
ausgeführt? Die im Interface kann man nicht ausführen (abstrakt) und die
der abgeleiteten Klasse auch nicht, weil nicht virtuell.
| Quote: | Man kann mehrere Interfaces
in einer Klasse implementieren, diese könnte man in C++ mit
Mehrfachvererbung erreichen.
|
genau.
Raymond
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de |
|
| Back to top |
|
 |
Albert Weinert Guest
|
Posted: Tue Mar 14, 2006 12:06 pm Post subject: Re: Interfaces |
|
|
Raymond Haeb schrieb:
| Quote: | Habe gerade die Java Interfaces nicht auf dem Schirm, aber in C# sind
Interfaces schon ein wenig anderes als abstrakte Basisklassen.
Bei Interfaces brauchst Du erst in der Implemtierung entscheiden ob z.B.
eine Methode virtuell machst oder nicht. Und Interfaces können keine
ausprogrammierte Funktionnalität enhalten.
Heißt das, es gibt Interfaces die abstrakte Funktionen (also "=0")
enthalten die nicht virtuell sind? Wenn man dann einen Zeiger auf
|
Ja.
| Quote: | ein Objekt hat welches ein solches interface implementiert und damit
|
Man hat nicht in dem Maße Zeiger in C#, bei "normaler" Programmierung
hat man gar keine Zeiger. Es gibt zwar Pointer, aber diese kann man nur
bei s.g. unsichere gegenzeichneten Abschnitten verwenden. Objekte von
Klassen werden grundsätzlich als Referenz durch die gegend geschoben.
| Quote: | eine solche Funktion aufrufen will, welche wird dann tatsächlich
ausgeführt? Die im Interface kann man nicht ausführen (abstrakt) und die
der abgeleiteten Klasse auch nicht, weil nicht virtuell.
|
Natürlich kann man diese Funktionen in den abgeleiteten Klassen
ausführen. Sonst würde es ja kein Sinn machen. Zusätzlich kann halt die
abgeleitete Klasse entscheiden ob man die Funktion überschreibbar mach
oder nicht.
--
Freundliche Grüße
Albert Weinert
http://der-albert.com
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de |
|
| Back to top |
|
 |
Martin Aupperle Guest
|
Posted: Thu Mar 16, 2006 11:06 am Post subject: Re: Interfaces |
|
|
On Mon, 13 Mar 2006 11:58:58 +0100, Albert Weinert
<newsH2-04@der-albert.com> wrote:
| Quote: |
Habe gerade die Java Interfaces nicht auf dem Schirm, aber in C# sind
Interfaces schon ein wenig anderes als abstrakte Basisklassen.
Bei Interfaces brauchst Du erst in der Implemtierung entscheiden ob z.B.
eine Methode virtuell machst oder nicht. Und Interfaces können keine
ausprogrammierte Funktionnalität enhalten. Man kann mehrere Interfaces
in einer Klasse implementieren, diese könnte man in C++ mit
Mehrfachvererbung erreichen.
|
aus Sicht des Programmierers korrekt: In C# bestimmt die
Implementierung eines Interface, ob sie virtuell sein soll, oder
nicht.
ABER: Du kannst Variablen mit Interface-Typ bilden, und darüber
Objektfunktionen aufrufen, also z.B. (Pseudocode):
interface I;
class A implements I {...}
class B implements I {...}
I ip = new A();
...
ip = new B()
Das heißt, ip kann sowohl auf eine Instanz von A als auch von B
zeigen. Schreibst du nun
ip.x();
für eine Funktion x aus I (und natürlich A und B), musst zur Laufzeit
entschieden werden, ob hier A oder B gemeint ist.
Klassischer Fall von Polymorphismus. Auch wenn es auf der
*Sprachebene* von C# nicht notwendig ist, x virtuell zu machen, wird
ein solcher Mechanismus in den Innereien der Implementierung
gebraucht.
Oder sehe ich da was falsch?
Martin
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de |
|
| Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|