www.vorhilfe.de
Vorhilfe

Kostenlose Kommunikationsplattform für gegenseitige Hilfestellungen.
Hallo Gast!einloggen | registrieren ]
Startseite · Forum · Wissen · Kurse · Mitglieder · Team · Impressum
Forenbaum
^ Forenbaum
Status Vorhilfe
  Status Geisteswiss.
    Status Erdkunde
    Status Geschichte
    Status Jura
    Status Musik/Kunst
    Status Pädagogik
    Status Philosophie
    Status Politik/Wirtschaft
    Status Psychologie
    Status Religion
    Status Sozialwissenschaften
  Status Informatik
    Status Schule
    Status Hochschule
    Status Info-Training
    Status Wettbewerbe
    Status Praxis
    Status Internes IR
  Status Ingenieurwiss.
    Status Bauingenieurwesen
    Status Elektrotechnik
    Status Maschinenbau
    Status Materialwissenschaft
    Status Regelungstechnik
    Status Signaltheorie
    Status Sonstiges
    Status Technik
  Status Mathe
    Status Schulmathe
    Status Hochschulmathe
    Status Mathe-Vorkurse
    Status Mathe-Software
  Status Naturwiss.
    Status Astronomie
    Status Biologie
    Status Chemie
    Status Geowissenschaften
    Status Medizin
    Status Physik
    Status Sport
  Status Sonstiges / Diverses
  Status Sprachen
    Status Deutsch
    Status Englisch
    Status Französisch
    Status Griechisch
    Status Latein
    Status Russisch
    Status Spanisch
    Status Vorkurse
    Status Sonstiges (Sprachen)
  Status Neuerdings
  Status Internes VH
    Status Café VH
    Status Verbesserungen
    Status Benutzerbetreuung
    Status Plenum
    Status Datenbank-Forum
    Status Test-Forum
    Status Fragwürdige Inhalte
    Status VH e.V.

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:

Open Source FunktionenplotterFunkyPlot: Kostenloser und quelloffener Funktionenplotter für Linux und andere Betriebssysteme
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.vorhilfe.de