www.vorhilfe.de
Vorhilfe

Kostenlose Kommunikationsplattform für gegenseitige Hilfestellungen.
Hallo Gast!einloggen | registrieren ]
Startseite · Forum · Wissen · Kurse · Mitglieder · Team · Impressum
Forenbaum
^ Forenbaum
Status Englisch
  Status Grammatik
  Status Lektüre
  Status Korrekturlesen
  Status Übersetzung
  Status Sonstiges (Englisch)

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
Forum "C/C++" - Klasse: Unterschied -> und ::
Klasse: Unterschied -> und :: < C/C++ < Programmiersprachen < Praxis < Informatik < Vorhilfe
Ansicht: [ geschachtelt ] | ^ Forum "C/C++"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien

Klasse: Unterschied -> und ::: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 12:40 So 17.01.2010
Autor: nana

Ich habe ein paar Fragen zu Klassen (ich bin Anfängerin, habe also kein sehr tiefes Verständnis von Informatik und besonders c++ :
Also...

ERSTENS: Erstellen von Objekten: muss ich das über den Konstruktor machen?? Was ist der Unterschied zwischen den beiden Alternativen unten??(für class Konto zB):
main () {
Konto* k1 = new Konto ("Inhaber1", 500)
Konto k" = Konto ("Inhaber2", 350)
}

ZWEITENS: Wie rufe ich Methoden einer Klasse auf (und mache ich das beim Konstruktor- zählt er auch als "normale" Methode??
Konto K;
//Konto* p= new Konto K; <- geht sowas?????
p->printkontostand
Konto::printkontostand ();
K.printkontostand ();

Vielen Dank für die Antworten, auch wenn die Fragen euch vllt doof vorkommen :P !!!

(Ich habe diese Frage in keinem Forum auf anderen Internetseiten gestellt.)



        
Bezug
Klasse: Unterschied -> und ::: Antwort
Status: (Antwort) fertig Status 
Datum: 10:40 Mo 18.01.2010
Autor: Karl_Pech

Hallo nana,


> ERSTENS: Erstellen von Objekten: muss ich das über den
> Konstruktor machen??


Ja, immer.


> Konto* k1 = new Konto ("Inhaber1", 500);


Hier wird ein Objekt auf dem Programm-Heap erstellt. k1 zeigt auf dieses Objekt. Zeiger werden gerne in Situationen verwendet, wo man ein Objekt an die "Außenwelt" zurückgeben muss. Da es zu aufwendig (bis unmöglich) wäre das gesamte Objekt zurückzugeben, wird stattdessen ein Zeiger auf das Objekt zurückgegeben. Allerdings muß das Objekt auf dem globalen Programm-Heap erstellt worden sein, da alle lokalen Objekte der Funktion nach dem Sprung aus der Funktion zerstört werden. (Ihre Destruktoren werden automatisch aufgerufen.) Dadurch werden die Zeiger auf diese Objekte ungültig.


>  Konto k" = Konto ("Inhaber2", 350)


Das geht so nicht. Wenn du ein lokales Objekt erzeugen willst, mache es so: Konto k("Inhaber2", 350);


> Konto K;
>  //Konto* p= new Konto K; <- geht sowas?????


Nein, stattdessen: Konto* p = &K; Denn du willst ja die Adresse des Objektes K an p zuweisen.


>  p->printkontostand();


[ok]


>  Konto::printkontostand ();


Das geht so nicht. Die '::'-Schreibweise wird verwendet, um Methoden einer Klasse zu definieren. Also sowas wie das hier:


1: class test {
2: public:
3: void testit(int i);
4: };
5:
6: void test::testit(int i) {
7: }


>  K.printkontostand ();


[ok]



Viele Grüße
Karl




Bezug
                
Bezug
Klasse: Unterschied -> und ::: Rückfrage
Status: (Frage) beantwortet Status 
Datum: 12:34 Mo 18.01.2010
Autor: nana

Eingabefehler: "{" und "}" müssen immer paarweise auftreten, es wurde aber ein Teil ohne Entsprechung gefunden (siehe rote Markierung)

Vielen Dank erstmal!!
Ich hab aber doch noch ein paar Fragen obwohl mir viele Sachen jetzt viel klarer sind....

Und zwar:


> Konto* k1 = new Konto ("Inhaber1", 500);

Jetzt habe ich ja über den Zeiger k1 ein neues Konto mit den Daten "Inhaber1" und 500 erstellt, oder?
Kann ich denn dieses neue Konto benennen??
zB *k1 = k oder so??


> >  Konto k" = Konto ("Inhaber2", 350)

>  
> Das geht so nicht.

Geht das wirklich nicht?? Ich habe grad in unserem Skript etwas ähnliches gefunden:

CList CList::ccopy () {
CList lnew = CList();
...

Also CList ist eine bereits deklarierte Klasse und wir wollen eine Kopie anlegen, aber lnew wird ja wie oben "erschaffen", oder ist da ein Unterschied??


Vielen Dank im Voraus!!



Bezug
                        
Bezug
Klasse: Unterschied -> und ::: Antwort
Status: (Antwort) fertig Status 
Datum: 19:16 Mo 18.01.2010
Autor: Karl_Pech

Hallo nana,


> > Konto* k1 = new Konto ("Inhaber1", 500);
>  
> Jetzt habe ich ja über den Zeiger k1 ein neues Konto mit
> den Daten "Inhaber1" und 500 erstellt, oder?


Nicht "über den Zeiger", sondern: Der Zeiger wurde auf das auf dem Programm-Heap erzeugte Objekt gesetzt.


>  Kann ich denn dieses neue Konto benennen??
>  zB *k1 = k oder so??


Was meinst du mit benennen? Über den Zeiger hast du doch bereits vollen Zugriff auf das Objekt. Und da der Zeiger eine Bezeichnung trägt, ist das Objekt auch eindeutig "ansprechbar". Und was denn Ausdruck *k1 = k angeht: Solche Zuweisungen werden vom Compiler akzeptiert. (Unter der Annahme das k1 vom Typ 'Konto*' ist und k vom Typ 'Konto'.) Auch Zuweisungen wie k1 = k2 unter der Annahme, daß beide Objekte vom Typ 'Konto' sind, sind erlaubt. Aber eigentlich ist die Sache noch etwas komplizierter. Schaue dir dazu folgende []Seite über Vererbung an.


>
> > >  Konto k" = Konto ("Inhaber2", 350)

>  >  
> > Das geht so nicht.


Doch das geht, sorry aber C++ ist bei mir schon etwas länger her.
Das Obige ist, denke ich, dasselbe wie Konto k("Inhaber2", 350). Die Frage ist natürlich: Weshalb diese Redundanz? Ich denke, es hat etwas mit Situationen zu tun, wo die Bezeichnung eines Objektes nicht wichtig ist, d.h. wenn man temporäre lokale Objekte für was auch immer erzeugen möchte. Hier ein Beispiel:


Datei testmain.cpp:


1: #include "testit.h"
2:
3: void fun() {
4: for(int i = 0; i < 6; i++) {
5: testit(i+1);
6: }
7: }
8:
9:
10: int main(int argc, char* argv[]) {
11: testit(1);
12: new testit(2);
13: testit k = testit(3);
14: fun();
15: testit k1(10);
16: testit k2(20);
17: testit* pk = &k1;
18:
19: k1.id = 123;
20: k2.id = 456;
21: *pk = k2;
22: cout << pk->id; // hier wird "456" ausgegeben
23:
24: return 0;
25: }


Datei testit.h:


1: #include <iostream>
2: using namespace std;
3:
4: class testit {
5: public:
6: int id;
7: testit(int d);
8: };


Datei testit.cpp:


1: #include "testit.h"
2:
3: testit::testit(int d) {
4: cout << d << "\n";
5: }


Mit diesen Quelltextdateien kannst du verschiedene Szenarien auch selber ausprobieren.



Viele Grüße
Karl




Bezug
                                
Bezug
Klasse: Unterschied -> und ::: Danke
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 13:11 Sa 23.01.2010
Autor: nana

Hey vielen Dank (auch wenns etwas spät kommt, hatte das ganz vergessen), dass du dir die Mühe gemacht hast, hab jetzt einiges schon ganz gut verstanden :) ...
Liebe Grüße, nana

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


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