matheraum.de
Raum für Mathematik
Offene Informations- und Nachhilfegemeinschaft

Für Schüler, Studenten, Lehrer, Mathematik-Interessierte.
Hallo Gast!einloggen | registrieren ]
Startseite · Forum · Wissen · Kurse · Mitglieder · Team · Impressum
Forenbaum
^ Forenbaum
Status Schulmathe
  Status Primarstufe
  Status Mathe Klassen 5-7
  Status Mathe Klassen 8-10
  Status Oberstufenmathe
    Status Schul-Analysis
    Status Lin. Algebra/Vektor
    Status Stochastik
    Status Abivorbereitung
  Status Mathe-Wettbewerbe
    Status Bundeswettb. Mathe
    Status Deutsche MO
    Status Internationale MO
    Status MO andere Länder
    Status Känguru
  Status Sonstiges

Gezeigt werden alle Foren bis zur Tiefe 2

Navigation
 Startseite...
 Neuerdings beta neu
 Forum...
 vorwissen...
 vorkurse...
 Werkzeuge...
 Nachhilfevermittlung beta...
 Online-Spiele beta
 Suchen
 Verein...
 Impressum
Das Projekt
Server und Internetanbindung werden durch Spenden finanziert.
Organisiert wird das Projekt von unserem Koordinatorenteam.
Hunderte Mitglieder helfen ehrenamtlich in unseren moderierten Foren.
Anbieter der Seite ist der gemeinnützige Verein "Vorhilfe.de e.V.".
Partnerseiten
Weitere Fächer:

Open Source FunktionenplotterFunkyPlot: Kostenloser und quelloffener Funktionenplotter für Linux und andere Betriebssysteme
StartseiteMatheForenC/C++Container, Vecor, Templates
Foren für weitere Schulfächer findest Du auf www.vorhilfe.de z.B. Philosophie • Religion • Kunst • Musik • Sport • Pädagogik
Forum "C/C++" - Container, Vecor, Templates
Container, Vecor, Templates < C/C++ < Programmiersprachen < Praxis < Informatik < Vorhilfe
Ansicht: [ geschachtelt ] | ^ Forum "C/C++"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien

Container, Vecor, Templates: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 13:50 Do 04.02.2010
Autor: nana

Hallo!!
Ich habe ein paar Fragen zu generischen Klassen und Prozeduren, sowie zu Containern...
Also im Grunde ist mir klar warum man Templates verwendet: um eine Prozedur oder eine Klasse unabhängig von best Datentypen zu machen, oder?
Bei einer Prozedur wird das dann so geschrieben:
template< class T> void tausche (T& a, T& b)
kann ich jetzt die Methode tausche einfach ganz normal aufrufen? also zB
tausche (5,6)
oder muss das so aufgerufen werden?:
void tausche<int> (int& a, int& b)
was ist der Unterschied?

Bei einer Klasse:
template<class T> class SimpleArray
(muss es eig T sein oder kann es auch ein anderer Buchstabe sein oder sogar kleingeschrieben und mit mehreren Zeichen??)
In der Folie der Vorlesung steht:
"In dem Template ist der Klassenname SimpleArray<T> zu verwenden.(Aber nicht für Operationsnamen für Konstruktor und Destruktor.)" -> was bedeutet denn eig template, bzw was genau ist das Template?? die generische Klasse, oder was genau?? das bsp ist jedenfalls so:
template <class T> SimpleArray<T>::SimpleArray (int r, T f)
dh man muss anstatt SimpleArray immer SimpleArray<T> schreiben, oder??
auch hier wieder die gleiche Fragestellung wie oben:
SimpleArray<int> g (3,4) muss man das so machen oder reicht nicht SimpleArray g(3,4) ???

Soo...jetzt zu den Containern...
Was ist eig ein Container?? Ist das eine Art Datentyp wie Liste (meine mal sowas gelesen zu haben) ???
und was ist dann ein Vector bzw eine map??
Mir ist das in den Erklärungen bis jetzt immer ein wenig zu abstrakt gewesen...

Vielen Dank für alle ANtworten!!!
LG, nana



        
Bezug
Container, Vecor, Templates: Antwort
Status: (Antwort) fertig Status 
Datum: 07:18 Fr 05.02.2010
Autor: felixf

Hallo nana!

>  Ich habe ein paar Fragen zu generischen Klassen und
> Prozeduren, sowie zu Containern...
>  Also im Grunde ist mir klar warum man Templates verwendet:
> um eine Prozedur oder eine Klasse unabhängig von best
> Datentypen zu machen, oder?

Genau.

>  Bei einer Prozedur wird das dann so geschrieben:
>  template< class T> void tausche (T& a, T& b)

>  kann ich jetzt die Methode tausche einfach ganz normal
> aufrufen? also zB
> tausche (5,6)

So sicher nicht: es gibt keine Moeglichkeit T so zu waehlen, dass 5 und 6 vom Typ T & sind.

Eher sowas wie:

1: int & a, b;
2: tausche(a, b);


>  oder muss das so aufgerufen werden?:
>  void tausche<int> (int& a, int& b)

Nein, so kannst du es nicht aufrufen. Entweder tausche(a, b) oder tausche<int>(a, b).

Das zweite ist z.B. hier wichtig:
1: template<class T> T summe(T a, T b) { return a + b; }
2: summe<int>(1, 1.5);


Wenn man nur summe(1, 1.5) schreibt, weiss der Compiler nicht, ob T nun ein int oder ein float/double ist. Wenn man aber T = int explizit vorgibt, weiss der Compiler dass ein int gemeint ist. Das Argument 1.5 wird nun erst automatisch zu einem int konvertiert (also zu 1), bevor 1 und 1 addiert werden und 2 (als int) zurueckgegeben wird.

>  was ist der Unterschied?

Ich hoffe das ist jetzt etwas klarer.

> Bei einer Klasse:
>  template<class T> class SimpleArray

>  (muss es eig T sein oder kann es auch ein anderer
> Buchstabe sein oder sogar kleingeschrieben und mit mehreren
> Zeichen??)

Es kann irgendein Bezeichner sein, der nicht innerhalb der Klasse anders verwendet werden soll ;-)

Zum Beispiel kann man auch sowas wie

template<class Skalar> class Vektor { ... }

machen.

>  In der Folie der Vorlesung steht:
>  "In dem Template ist der Klassenname SimpleArray<T> zu

> verwenden.(Aber nicht für Operationsnamen für Konstruktor
> und Destruktor.)" -> was bedeutet denn eig template, bzw
> was genau ist das Template?? die generische Klasse, oder
> was genau?? das bsp ist jedenfalls so:
>  template <class T> SimpleArray<T>::SimpleArray (int r, T

> f)
>  dh man muss anstatt SimpleArray immer SimpleArray<T>

> schreiben, oder??

Ja. (Eventuell gibt's ein paar Aussagen, da bin ich mir gerade nicht 100%ig sicher, aber im Zweifelsfall ist das <T> da immer besser.)

>  auch hier wieder die gleiche Fragestellung wie oben:
>  SimpleArray<int> g (3,4) muss man das so machen oder

> reicht nicht SimpleArray g(3,4) ???

Bei der Deklaration von g vom Typ SimpleArray<int> musst du das <int> schon angeben.

> Soo...jetzt zu den Containern...
>  Was ist eig ein Container?? Ist das eine Art Datentyp wie
> Liste (meine mal sowas gelesen zu haben) ???

Ja, wobei es etwas abstrakter ist. Ob der Container nun im Endeffekt eine (verkettete) Liste, ein Array, ein Baum, eine Hashtabelle oder sonstwas ist, ist voellig egal. Ein Container ist einfach etwas abstraktes, wo man Objekte reinstecken und wieder rausholen kann. Es ist sozuagen ein Konzept, und eine generische Klasse kann eine spezielle Art von Container "implementieren" (die wiederum unabhaengig vom Datentyp ist, weil generisch).

>  und was ist dann ein Vector bzw eine map??

Das sind jeweils Container, bzw. verschiedene Realisierungen des Konzeptes Container.

> Mir ist das in den Erklärungen bis jetzt immer ein wenig
> zu abstrakt gewesen...

Es ist auch sehr Abstrakt ;-)

Aber irgendwann gewoehnt man sich dran. Mal ein Beispiel. Wenn du eine einfache Sortierroutine schreiben willst (die nur mit zwei benachbarten Elementen schreibst), brauchst du ja nur eine Datenstruktur wo du zum naechsten/vorherigen Element kommen kannst und weisst ob du beim letzten oder ersten Element bist. Ob die Elemente nun als Array oder Liste gespeichert werden ist dir ziemlich egal. Also schaust du nach, ob es ein Konzept gibt, welches gerade das bedient (z.B. ein (spezieller) Container) und schreibst deine Sortierungs-Routine so, dass sie mit allen Containern (oder allen Containern eines bestimmten Types, wie etwa vector und list, aber nicht map) zusammenarbeitet.

(Falls du mal mit Java gearbeitet hast: Interfaces dort sind sozusagen formalisierte Versionen eines Konzeptes wie Container: sie sagen genau was ein Container koennen soll. In C++ ist ein solches Konzept nicht umbedingt formal fixiert.)

LG Felix


Bezug
Ansicht: [ geschachtelt ] | ^ Forum "C/C++"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien


^ Seitenanfang ^
www.schulmatheforum.de
[ Startseite | Forum | Wissen | Kurse | Mitglieder | Team | Impressum ]