C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Interfaces
Goto page 1, 2  Next
 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German)
View previous topic :: View next topic  
Author Message
Markus Raab
Guest





PostPosted: Sun Mar 12, 2006 2:33 pm    Post subject: Interfaces Reply with 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?

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





PostPosted: Sun Mar 12, 2006 6:06 pm    Post subject: Re: Interfaces Reply with quote



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





PostPosted: Sun Mar 12, 2006 6:06 pm    Post subject: Re: Interfaces Reply with quote



Thomas Maeder <jvxexluzrgmr (AT) mailinator (DOT) com> writes:
Quote:
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."

Aufrufe statischer Methoden sind auch in Java nicht dynamisch
gebunden. Sie könnten mit einem ersten »this«-Parameter
verwendet werden, um nicht-virtuelle Aufrufe zu emulieren.
Das ist aber in der Regel nicht nötig, denn:

Die virtuelle Javamaschine enthält einen
Gerade-rechtzeitig-Optimierer »Hotspot«, der die meisten
Aufrufe durch globales Einreihen (inlining) de-virtualisiert.

http://www.cs.ucsb.edu/~ckrintz/papers/devirt-ibmjit.pdf
http://latte.snu.ac.kr/publications/vcall_interact00_a4.ps
http://www.cs.cornell.edu/Info/Courses/Spring-99/CS612/reports/fabio-ioannis/CS612.doc

--
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





PostPosted: Sun Mar 12, 2006 7:06 pm    Post subject: Re: Interfaces Reply with quote

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





PostPosted: Sun Mar 12, 2006 7:06 pm    Post subject: Re: Interfaces Reply with quote

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





PostPosted: Sun Mar 12, 2006 7:06 pm    Post subject: Re: Interfaces Reply with quote

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





PostPosted: Sun Mar 12, 2006 11:06 pm    Post subject: Re: Interfaces Reply with quote

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





PostPosted: Mon Mar 13, 2006 12:06 am    Post subject: Re: Interfaces Reply with quote

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





PostPosted: Mon Mar 13, 2006 3:58 pm    Post subject: Re: Interfaces Reply with quote

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





PostPosted: Mon Mar 13, 2006 9:35 pm    Post subject: Re: Interfaces Reply with quote

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





PostPosted: Tue Mar 14, 2006 12:06 am    Post subject: Re: Interfaces Reply with quote

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





PostPosted: Tue Mar 14, 2006 6:39 am    Post subject: Re: Interfaces Reply with quote

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





PostPosted: Tue Mar 14, 2006 7:06 am    Post subject: Re: Interfaces Reply with quote

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





PostPosted: Tue Mar 14, 2006 12:06 pm    Post subject: Re: Interfaces Reply with quote

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





PostPosted: Thu Mar 16, 2006 11:06 am    Post subject: Re: Interfaces Reply with quote

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
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German) All times are GMT
Goto page 1, 2  Next
Page 1 of 2

 
Jump to:  
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


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.