001
13.09.2011, 17:17 Uhr
0xdeadbeef
Gott (Operator)
|
Du leitest da stumpf von Test eine anonyme Klasse ab und überlädst die Methode func.
Folgendes ist in C++ anders:
1. Es gibt keine anonymen Klassen. 2. Methoden müssen explizit als virtuell gekennzeichnet werden, damit man sie auf diese Weise überladen kann. 3. Klassen sind keine Referenztypen.
Grob übersetzt käme dementsprechend Folgendes heraus:
C++: |
#include <iostream>
class Test { public: // Wenn du eine Klasse polymorphisch benutzen willst, solltest du den // Destruktor virtuell machen; sonst läufst du mit Heap-Allokation in // böse Probleme. // Ich schreibe die Methodenkörper hier der Kürze halber direkt in die // Klasse; üblicherweise schreibt man die in eine eigene // Übersetzungseinheit außerhalb der Klassendeklaration. virtual ~Test() { } virtual void func() const { std::cout << "Ausgabe Basisklasse" << std::endl; } };
// Test_2 erbt von Test class Test_2 : public Test { public: virtual void func() const { std::cout << "Ausgabe Kindklasse" << std::endl; } };
// Übergabe per Referenz. Das ist im Gegensatz zu Java nicht automatisch // der Fall, und mit Wertübergabe würde hier aus dem Objekt der Klasse // Test_2 ein Objekt der Klasse Test gebaut, wodurch der Teil, der Test_2 // ausmacht, verloren ginge (das nennt sich dann Slicing). void foo(Test const &t) { t.func(); }
int main() { Test_2 t2;
foo(t); }
|
-- Einfachheit ist Voraussetzung für Zuverlässigkeit. -- Edsger Wybe Dijkstra Dieser Post wurde am 13.09.2011 um 17:20 Uhr von 0xdeadbeef editiert. |