Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » public-frage

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
07.07.2003, 20:44 Uhr
~Torben
Gast


Hi!
Wie kriegt man das hin, daß der Inhalt eines
char *bspText

als public angesehen wird und der Inhalt von jeder Funktion aus abgerufen werden kann.

Danke!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
07.07.2003, 20:47 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


ist bpsText in einer Klasse oder wo meinst du?
Oder meinst du mit "public" Global?
dann musst du es einfach ausserhalb von jeglicher Funktion deklarieren, also z.b So:


C++:
// header sind mal außenvor

char *bspText = NULL;

void Init()
{
  bspText = new char[6];
  strcpy(bspText,"Hallo");
}

void Ausgabe()
{
  printf("%s",bspText);
}

int main(void)
{
  Init();
  Ausgabe();

  // aufräumen des Speichers:
  delete[] bspText;

  return 0;
}


--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
07.07.2003, 21:32 Uhr
Pablo
Supertux
(Operator)


Wenn in einer Funktion drin sein muss, dann musst du public: eingeben und alles ab diesem Punkt ist public.


C++:
class XYZ
{
    // der Teil ist private
    *
    *
    *
    public: // ab hier alles öffentlich
    char* bspText;
    *
    *
    *
};


--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!

Dieser Post wurde am 07.07.2003 um 21:32 Uhr von Pablo Yanez Trujillo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
08.07.2003, 21:39 Uhr
~Torben
Gast


Also, nach langem hin und her, muß ich gestehen, ich komme nicht so ganz weiter.

Zur Erläuterung:

Von einer Klasse wird char* bspText an eine Funktion einer anderen Klasse übergeben.

Bsp:
1) Main.cpp:


Code:
    char *bspText;
    ...// bspText bekommt Inhalt zugewiesen.
    ...
    SHFile shf;

    isOk = shf.loadFunktion1(bspText)   //Übergabe bspText



2) SHFile.cpp


Code:
    bool SHFile::loadFunktion1(char* sText) //sText entspricht bspText
    {
        ...
        xyInhalt = sText;   //xyInhalt wird in "dieser Klasse" in "3 weiteren
                                  //Funktionen" benötigt
        ...
    }



3) SHFile.h


Code:
    ...
    public:
        char *xyInhalt; // ! Deswegen habe ich es hier als public deklariert
    ...



Ich weiß nicht, ob das die sauberste Lösung ist, was meint Ihr?

Man sagte mir, das öffentliche Datenmember schlecht sind, deshalb solle ich es mit getter- und setter-Funktionen machen, aber ich verstehe das Prinzip nicht ganz und weiß auch nicht, wie ich das im Code umsetzen soll.

Kann mir jemand vielleicht auf die Sprünge helfen?

Danke!
Gruß
Torben
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
09.07.2003, 09:34 Uhr
ao

(Operator)


Alle Memberfunktionen einer Klasse können alle Membervariablen sehen. D.h. wenn xyInhalt nur für Funktionen derselben Klasse sichtbar sein muß, genügt private.

Wenn du andere Klassen von SHFile ableitest und diese auch Zugriff auf xyInhalt brauchen, muß es protected sein.

Noch was anderes: Durch die Pointer-Zuweisung "xyInhalt = sText;" greift SHFile direkt auf Member von XYZ zu; Member-Sharing ist ne üble Falle, die die Gefahr birgt, daß XYZ::bspText irgendwann von irgendwem verändert oder freigegeben wird und SHFile dadurch unerwartet Probleme bekommt.

Sicherer ist, wenn jede Klasse ihre eigene Kopie des Inhalts hat und über die Lebensdauer selbst bestimmt.

Wenn du aus irgendwelchen zwingenden Gründen Member-Sharing machen *mußt*, gehört ein Verriegelungsmechanismus oder eine Lebenszeitkontrolle dazu, um sicherzustellen, daß der Inhalt nicht gelöscht wird, solange noch jemand da ist, der ihn braucht.

ao
 
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: