Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Referenz oder Zeiger?

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
25.06.2006, 21:22 Uhr
Whinegum



Hi. Ich lerne seit einiger Zeit C++ (konsolenbasierend) und habe eine Frage zu folgendem Quellcode aus meinem Buch:


C++:
#include <iostream>
using namespace std;

class SimpleCat
{
      public:
             SimpleCat ();
             SimpleCat(SimpleCat&);
             ~SimpleCat();
};

SimpleCat::SimpleCat()
{
                      cout << "Simple Cat Konstruktor...\n";
}

SimpleCat::SimpleCat(SimpleCat&)
{
                                cout << "Simple Cat Kopiekonstruktor...\n";
}
SimpleCat::~SimpleCat()
{
                     cout << "Simple Cat Destruktor...\n";
}

SimpleCat FunctionOne (SimpleCat theCat);
SimpleCat * FunctionTwo (SimpleCat *theCat);

int main()
{
    unsigned short int zusatz;
    cout << "Eine Katze erzeugen...\n";
    SimpleCat Felix;
    cout << "FunctionOne aufrufen...\n";
    FunctionOne(Felix);
    cout << "FunctionTwo aufrufen...\n";
    FunctionTwo (&Felix);
    cin >> zusatz;
    return 0;
}

// Function One Übergabe als Wert
SimpleCat FunctionOne(SimpleCat theCat)
{
          cout << "Function One Rueckkehr...\n";
          return theCat;
}

// Function two Übergabe als Referenz
SimpleCat* FunctionTwo (SimpleCat *theCat)
{
           cout << "FunctionTwo. Rueckkehr...\n";
           return theCat;
}




Ich finde das sieht alles danach aus als würde FunctionTwo Zeiger evrwenden. Im buch steht allerdings ausdrücklich es würde sich um Referenzen handeln. Wer hat nun Recht?^^
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
25.06.2006, 22:03 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


Das sind Zeiger.

Referenz wäre so:


C++:

// ...
FunctionTwo (Felix);
// ...

// Function two Übergabe als Referenz
void FunctionTwo (SimpleCat &theCat)
{
           cout << "FunctionTwo.\n";
}



mit * ists immer ein Zeiger.
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
25.06.2006, 22:18 Uhr
Whinegum



OK.Danke
dann bin ich ja froh, dass ich es doch verstanden habe und das Buch falsch liegt

Dieser Post wurde am 25.06.2006 um 22:18 Uhr von Whinegum editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
26.06.2006, 00:03 Uhr
J-jayz-Z
Perl Crack ala Carte
(Operator)


Hmm,ich seh da durchaus nur ANSI drin.

--
perl -Mstrict -Mwarnings -e 'package blub; sub new { bless {} } sub bar {my $self=shift; $self->{bla}="66756e2d736f66742e6465"; return $self->{bla};} my $foo=blub->new();print "Hallo ";print pack("H*",$foo->bar()); print "\n"'
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
26.06.2006, 11:17 Uhr
Whinegum



Hmm. Ok. Sorry, dass es falsch gepostet war. ABer nochmal ne andere Frage:

C++:
const SimpleCat * const FunctionTwo ( const SimpleCat * const theCat)
{
      cout << "FunctionTwo. Rueckkehr...\n";
      cout << "Frisky ist jetzt" << theCat->GetAge() << " Jahre alt.\n";
      return theCat;
}



Könnt ihr mir kurz genauer erläutern was die "*" is diesem Zusammenhang aussagen? Das sieht für mich so aus als wäre es ein Zeiger auf eine Funktion, die als Parameter auch einen Zeiger erwartet. Aber das is ja eigl. gar kein Zeiger auf eine Funktion. Trotzdem kann man das erste "*" nicht auslassen. Und meine 2. Frage: Was genau ist alles konstant?

Dieser Post wurde am 26.06.2006 um 11:18 Uhr von Whinegum editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
26.06.2006, 11:46 Uhr
mike
Pinguinhüpfer
(Operator)


* = Zeiger / deferenzieren
Der Inhalt ist konstant und das, auf das der Zeiger zeigt (also Adresse kann nicht geändert w erden)

lg
--
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
26.06.2006, 11:56 Uhr
Whinegum



Ertsmal dabke für die Antwort. Meine Frage war eher warum

const SimpleCat * const FunctionTwo

das sa steht. Die Funktion hat eine konstane art von rückgabewert??
und das 2. const heißt, dass die Funktion nichts verändern darf?
Und am wenigsten evrsthee ich das "*". das würde ja heißen dass das nur ein Zeiger auf die Funktion ist !? die wird aber wie eine normale fumktion aufgerufen.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
26.06.2006, 12:10 Uhr
ao

(Operator)


Halt, Mistverständnis! Das ist kein Pointer auf eine Funktion, sondern eine Funktion, deren Rückgabewert ein Pointer ist.

Genauer gesagt, ein konstanter Zeiger (erstes const), der auf ein konstantes Objekt zeigt (zweites const).

Der Aufrufer von FunctionTwo erhält also als Ergebnis einen Zeiger auf ein Objekt vom Typ SimpleCat, und kann weder den Zeiger noch das Objekt verändern.

ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
26.06.2006, 12:20 Uhr
Whinegum



Ok. Danke. Jetzt wirds es ein wenig klarar. Muss es mir noch etwas verinnerlichen. Lieber erst weiterlernen wenn alles klar ist^^
ThX

edit: eine Frage noch. Wenn der Ruckgabewert der pointer ist warum schreibt man dannnicht const *SimpleCat const FunctionTwo()
tut mir leid wenn es eine doofe Frage ist. Ich möchte da nur mal ganz durchsteigen.

Dieser Post wurde am 26.06.2006 um 12:26 Uhr von Whinegum editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
26.06.2006, 12:30 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


jo ist:

rückgabetyp funktion(parameter)

rückgabetyp war da eben (SimpleCat*) also ein Pointer auf eine einfache Katze ^^
parameter auch.

die consts bedeuten folgendes:

const typ *pointer => der inhalt auf den pointer zeigt ist konstant
typ *const pointer => der pointer ist konstant, inhalt nicht
const typ *const pointer => pointer und inhalt ist konstant.

Beispiele:


C++:
int test = 100;

const int *fu = &test;

*fu = 50; // fehler, änderung des inhalts nicht erlaubt (der stern steht in diesem fall fürs dereferenzieren)

int *const fu2 = &test;

fu2 = fu; // fehler, kann keinem constanten-pointer eine neue adresse zuweisen

const int *const fu3 = &test;

*fu3 = 50; // fehler, konstanter inhalt
fu3 = fu; // fehler, konstanter pointer


--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: