[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