Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » private und public, zugriff auf elemente

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 <
000
11.05.2005, 10:25 Uhr
~cppatw
Gast


hi!

also ich lerne zur zeit noch c++ und hab da eine frage bezüglich klassen

und zwar, wenn ich zB variablen der klasse als private deklariere, muss ich ja elementarfunktionen aufsetzen um zB diese variable von einem objekt zu setzen oder abzufragen.

muss ich nun die funktion, die auf das private element zugreift, unbedingt innerhalb der klasse deklarieren oder kann ich diese funktion einfach nur innerhalb der klasse aufrufen?

danke im vorraus!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
11.05.2005, 10:57 Uhr
ao

(Operator)



Zitat von ~cppatw:
muss ich nun die funktion, die auf das private element zugreift, unbedingt innerhalb der klasse deklarieren?

Im Prinzip ja, nur eigene Methoden der Klasse können auf private Elemente zugreifen.

Aber C++ wäre nicht C++, wenn es nicht auch hier eine Ausnahme gäbe. Äußere Methoden, die als "friend" der Klasse deklariert sind, können das auch. Allerdings solltest du damit vorsichtig sein und das nur machen, wenn wichtige Gründe dafür sprechen, denn jede friend-Methode, die am regulären Interface einer Klasse vorbeigehen kann, ist eine Hintertür, die im Ernstfall das Debuggen schwieriger macht.

Übrigens, du solltest dir eine neue Tastatur gönnen, deine Shift-Taste ist kaputt.

ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
11.05.2005, 11:11 Uhr
~cppatw
Gast


Danke für die Antwort!

Sorry wegen der Unterlassung der Benutzung der Shift-Taste, ist eine blöde Angewohnheit
die man sich im Internet manchmal aus Bequemlichkeit sehr schnell aneignet!

Dann werde ich die Sache mit "friend" lieber lassen. Nur aus dem Lehrbuch aus dem ich c++ lerne wurde nicht ganz ersichtlich wo genau ich Funktionen deklarieren muss um auf alle Variablen der Klasse zuzugreifen.

Danke nochmal!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
11.05.2005, 13:47 Uhr
~cppatw
Gast


Also irgendwie schein ich was nicht ganz zu verstehen. mein Quellcode (nur zum Testen, hat keinen Nutzen) gibt etwas anderes raus als ich erwarte. ich lasse jetzt mit einer public-Funktion der Klasse Photon auf eine private-Variable derselben Klasse zugreifen und es kommt etwas unerwartetes raus (über 2 mio. "Photonen"). Der Compiler (g++ und devcpp) meldet keine Fehler und keine Warnungen.

Kann mir da jemand auf die Sprünge helfen?


C++:
#include <iostream.h>

const long int lightspeed = 300000;


class Photon
{
      public:
      
      unsigned int GetAmount()
      {
               itsamount = 12000;
               }
      signed int itsspeed;
            
      private:
      unsigned int itsamount;
      
      
      };
      
    

int main()
{
    Photon Light;
    
     Light.GetAmount();
     Light.itsspeed = lightspeed;
     cout << Light.itsspeed << " km/s " << Light.GetAmount() << " Photons per Ray" ;
     return 0;
}

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
11.05.2005, 13:59 Uhr
Tommix



Hallo,
das return fehlt:

C++:
//...
    unsigned int GetAmount()
    {
          itsamount = 12000;
          return itsamount;
    }
//...


Allerding sollte der Compiler hier sehr wohl einen Fehler melden.

Gruß, Tommix
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
11.05.2005, 14:02 Uhr
doppler



Wenn du g++ mit der Option -Wall oder -Wreturn-type aufrufst, sollte es dort auch eine Warnung geben.
Dieser Post wurde am 11.05.2005 um 14:10 Uhr von doppler editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
11.05.2005, 14:11 Uhr
~cppatw
Gast


Also der Compiler gibt schon eine Warnung aus aber nur weil ich iostream.h benutze (was dieser als veraltet moniert).

Das return wars! Oh je das war wohl ein richtig grundlegender Fehler....zurück in die Ecke und Funktionen nochmal genau anschauen.

Danke für die Hilfe!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
11.05.2005, 14:18 Uhr
doppler



Die Warnung wegen veraltetem #include <iostream.h> kannst du entfernen, indem du stattdessen

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


schreibst. In iostream.h werden nämlich alle Funktionen im globalen Namensraum definiert, während sie in iostream im Namensraum std definiert sind. Daher ist iostream gegenüber iostream.h zu bevorzugen (man möchte den globalen Namensraum "sauber halten").
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
11.05.2005, 14:21 Uhr
Tommix




Zitat von ~cppatw:
Also der Compiler gibt schon eine Warnung aus aber nur weil ich iostream.h benutze (was dieser als veraltet moniert).


Das ist richtig. Korrekt wäre z.B.

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


Ob das fehlende return nun ein "richtiger" Fehler ist, bin ich mir jetzt auch nicht mehr sicher. Mein Compiler sagt zwar Fehler, in der Doku ist selbiger dann aber als Warnung beschrieben.
Ein Falls für die Kenner des Standards.

- Tommix
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ 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: