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 Mathe
  Status Schulmathe
    Status Primarstufe
    Status Mathe Klassen 5-7
    Status Mathe Klassen 8-10
    Status Oberstufenmathe
    Status Mathe-Wettbewerbe
    Status Sonstiges
  Status Hochschulmathe
    Status Uni-Analysis
    Status Uni-Lin. Algebra
    Status Algebra+Zahlentheo.
    Status Diskrete Mathematik
    Status Fachdidaktik
    Status Finanz+Versicherung
    Status Logik+Mengenlehre
    Status Numerik
    Status Uni-Stochastik
    Status Topologie+Geometrie
    Status Uni-Sonstiges
  Status Mathe-Vorkurse
    Status Organisatorisches
    Status Schule
    Status Universität
  Status Mathe-Software
    Status Derive
    Status DynaGeo
    Status FunkyPlot
    Status GeoGebra
    Status LaTeX
    Status Maple
    Status MathCad
    Status Mathematica
    Status Matlab
    Status Maxima
    Status MuPad
    Status Taschenrechner

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
Dt. Schulen im Ausland: Mathe-Seiten: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. Geschichte • Erdkunde • Sozialwissenschaften • Politik/Wirtschaft
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.matheraum.de
[ Startseite | Forum | Wissen | Kurse | Mitglieder | Team | Impressum ]