012
03.12.2002, 15:06 Uhr
virtual
Sexiest Bit alive (Operator)
|
Final Classes bedeutet, dass du nicht mehr von ihnen ableiten darfst. Auch wenn es eh schlechter Stil ist, verbietet Dir C++ nicht, von einem STL Container abzuleiten:
C++: |
// Achtung: Böser code: class Filepath: public std::string { };
|
Schlechter Stil ist es aus gründen des Designs. Falscher Code ist es, weil std::string keinen virtuellen Destructor hat und damit bei der Destruction einen Filepath der Speicher des Strings nicht freigeben kann. Das Problem: C++ meckert das noch nicht mal als Fehler an, höchstens als Warnung, wenn du einen guten Compiler hast.
Anonyme Klassen sind Klassen, die man bei der Instanziierung ableiten kann, in C++ gibt es das nicht, aber eine entsprechende Syntax könnte so aussehen:
C++: |
// Normale Klasse class X { ... virtual void method() { std::cout << "X::method()" << std::endl; }; };
void f() { X* = new X(...) { // Überschreibe on-the-fly void method() { std::cout << "anonym::method()" << std::endl; }; }; }
|
Man bracht also nicht immer gleich das ganze geraffel mit Klassendeklaration und definition, sondern kann - bei einfachen Ableitungen - mal eben schnell was ableiten.
Interfaces: Es gibt Analogien zwischen Interfaces und Mehrfachvererbung. Allerdings würde ich aus Desgnsicht sagen, daß es unterschiede zwischen Klassen und Interfaces gibt. Eine Klasse ist etwas, was man Instanziieren kann (es sei denn es ist abstrakt). Ein Interface ist eine Schnittstellenvereinbarung. Ich finde, daß Interfaces eine bessere Granularität als Klassen haben: eine Klasse hat naturgemäß verschiedene Interfaces. Ein String hat zB Funktionsgruppen zur Abfrage des Stringinhalte, zur Serialisierung, zur Manipulation des Inhalts usw. Bei gut gewählten, hinreichend abstrakt formulierten Interfaces würde ich annehmen, daß man mit Interfaces klarer designen kann als mit Klassen. Java kommt übrigens komplett ohne merhfachvererbung aus, benutzt stattdessen sehr intensiv das Interface Feature. Und da muß ich sagen, daß sich insbesondere bei komplexeren Anwendungen ein klareres, leichter verständliches Design entwickeln läßt. Ist aber natürlich nur meine persönliche Ansicht. -- Gruß, virtual Quote of the Month Ich eß' nur was ein Gesicht hat (Creme 21) |