Wieso sind Funktionen in Klassen nicht per default virtell?
-
Javaner schrieb:
@ Artchi
Als Wanderer zwischen den Welten kannst du mir
sicher mal die Hauptunterschiede zwischen C++- und
Java-Templates aufzählen.Ich weiß nur, daß Java intern ohne Code-Kopieren auskommt.
Gibt es Einschränkungen? Kann man mit C++-Templates etwas machen,
was in Java nicht möglich ist?Die Dinge sind nicht zu vergleichen. Templates sind Vorlagen, die mit verschiedenen Parametern instanziert werden können. Du kannst zum Beispiel die Typen parametrisieren, oder auch konstante Werte.
Generics machen nur Typersetzung und sind damit in diesem Punkt weniger flexibel. In Java ist die Implementierung sogar doppelt unglücklich, da der Typ einfach durch Object ersetzt und zur Laufzeit ständig gecastet wird. Die Generics bringen aber auch eine interessante Idee mit, die auf Templates so nicht anwendbar ist: Generischer Code kann selber (ohne konkrete eingesetzte Parameter) compiliert werden und Constraints definieren.
-
groovemaster schrieb:
Nope. Das eine hat mit dem anderen nichts zu tun. Die übergebenen Parameter sind vollkommen unabhängig von this.
Beispiel was ich meine, vielleicht hast du mich ja falsch verstanden oder ich dich nicht

class MyClass { private: int z; public: MyClass():z(8) {} int funk() const { return z; } }; int testfunk(const MyClass& cc) { return cc.funk(); } int main() { MyClass a; int t = testfunk(a); return 0; }Würde man hier die Elementfunktion ja nicht als const definieren, dann könnte man ja funk() in testfunk() nicht aufrufen.
Meinte das nur, um zu zeigen wieso const gut ist ...
-
Aso, ich dachte du sprachst von den const Memberfunktionen und dort übergebenen const Referenz Parametern. Mit dem Beispielcode macht's natürlich wieder Sinn.
