[linux-l] Re: C++ - <vector> ...
Oliver Bandel
oliver at first.in-berlin.de
Mi Jun 1 00:14:40 CEST 2005
On Tue, May 31, 2005 at 10:45:53PM +0200, Axel Wei wrote:
> Am Sonntag, 29. Mai 2005 12:46 schrieb JSC:
> > polymorphie und templates sind dasselbe? in meinem verstaubten buch
> > "Breymann: C++ Eine Einfuehrung" stehen virtuelle funktionen unter
> > der ueberschrift polymorphie. und virtuelle funktionen glaubte ich
> > verstanden zu haben :-(
> >
> > ich werde lesen. kann mich aber vage erinnern, dass ich das schon zu
> > studiumszeiten templates nicht vollstaendig verstanden haben und als
> > komplett unlesbar eingestuft habe.
>
> Hi Jens,
>
> virtuelle Klassen (Klassen mit virtuellen Methoden) implementieren das
> Konzept des 'späten Bindens' (late binding) von Methoden und sind ein
> Teil der Vererbungs-Konzepte. (BTW: virtuelle Funktionen gibt es nicht.)
> Damit lassen sich heterogene Objekt-Mengen konsistent handhaben.
>
> Templates sind Klassenschablonen, die einen oder mehrere Parameter
> besitzen (Parameter können Zahlen oder Typen sein). Bei der
> Instanzierung eines Templates werden seine Parameter mit konkreten
> Werten/Typen belegt und eine neue Klasse generiert (mit Objektcode und
> allem was dazugehört).
[...]
> Zum Beispiel Listen (langweilig, aber als Beispiel beliebt). Soll die
> Implementierung einer Ur-Liste 'vererbt' werden, bietet sich das
> Template-Konzept an: die Algorithmen zum Einfügen, Suchen, Sortieren,
> Löschen usw. sind in allen Listen die selben - ob sie Zahlen, Strings
[...]
Mann, ey, klingt das alles kompliziert und aufwändig. :(
[...]
> Viele C++-Compiler können heute noch nicht beide Konzepte mischen, also
> Templates mit virtuellen Methoden akzeptieren. Darum sollte man davon
> die Finger lassen, wenn man portablen Code schreiben will.
[...]
Vielleicht sollte man von C++ die Finger lassen, oder von OO-Dogmatismus.
Wenn ich eine Liste in Ocaml brauche, nehme ich eine.
Keine Templates oder Klassendefinitionen.
===================================================================================
first:~ oliver$ ocaml
Objective Caml version 3.08.0
# let li1 = [1;5;3;66;7;8;9;10];;
val li1 : int list = [1; 5; 3; 66; 7; 8; 9; 10]
# let li2 = List.map (fun x -> x * x) li1;;
val li2 : int list = [1; 25; 9; 4356; 49; 64; 81; 100]
# type mylist_t = Int of int | String of string | Something_else;;
type mylist_t = Int of int | String of string | Something_else
# let li3 = [Int 3; String "hallo";Something_else; Int 44];;
val li3 : mylist_t list = [Int 3; String "hallo"; Something_else; Int 44]
# let print_stuff el = match el with
Int x -> print_int x
|String s -> print_endline s
| Something_else -> print_endline "etwas anderes";;
val print_stuff : mylist_t -> unit = <fun>
# List.iter print_stuff li3;;
3hallo
etwas anderes
44- : unit = ()
#
===================================================================================
Da braucht man nix groß herum zu definieren und sich einen abzubrechen.
Programmieren kann auch einfach sein und Spaß machen. :)
Ciao,
Oliver
Mehr Informationen über die Mailingliste linux-l