Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.de  
   

Die mobilen Seiten von c++.de:
http://m.c-plusplus.de
Infos hier [BETA]

  
c++.de :: C++ (auch C++0x und C++11) ::  Klassen und Rückgabewerte von Methoden     Zeige alle Beiträge auf einer Seite Auf Beitrag antworten
Autor Nachricht
lunatic82
Mitglied

Benutzerprofil
Anmeldungsdatum: 29.10.2001
Beiträge: 78
Beitrag lunatic82 Mitglied 13:34:00 04.05.2003   Titel:   Klassen und Rückgabewerte von Methoden            Zitieren

Hallo,

ich habe ein relativ allgemeines Problem zu Klassen und Methoden. Nehmen wir an, ich hätte folgende Klasse (is nur als Beispiel):

class myclass {
private: char var1[30];
char var2[3];

public: char get_var1();
};

var1 ist mit irgend einem Text gefüllt und nun soll mittels get_var1() einen Pointer auf den String an das eigentliche Hauptprogramm zurückgeben:

int main () {
char *ptr = get_var1();
(irgendwie so)

};

Nur wie muss dazu die Implementation aussehen? Kennt jemand ne gute Seite mit Tutorials zu diesem Thema oder einem Weg wie man das Problem anders lösen kann??

Bin für jede Hilfe dankbar.
rüdiger
Moderator

Benutzerprofil
Anmeldungsdatum: 11.07.2001
Beiträge: 23067
Beitrag rüdiger Moderator 14:07:00 04.05.2003   Titel:              Zitieren

man sollte keine Pointer auf interne Daten zurückgeben!

_________________
.
davie
Mitglied

Benutzerprofil
Anmeldungsdatum: 19.06.2002
Beiträge: 3981
Beitrag davie Mitglied 14:51:00 04.05.2003   Titel:              Zitieren

wnn du von dem char* nur lesen willst, dann nimm einen zeiger auf const char!
und wenn du darau zugreifen wills, ohne eine instanz der klasse zu haben, dann musst du alles static machen.

C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
class bar {
   static const char *foo;
public:
   static const char *get_foo() { return foo; }
};
 
const char *
bar::foo = "Hello World";
 
//willst du lesen und schreiben?
#include <cstring>
class bar2 {
   static char *foo;
public:
   static const char *get_foo () { return foo; }
   static void set_foo (const char *neu) {
      delete [] foo; foo = new char[strlen(neu)+1];
      strcpy (foo, neu);
   }    
};
 
char *
bar2::foo = 0; //=0 ist nicht explizit nötig afair
 
//oder willst du mit instanzen arbeiten?
class instanz_demo {
   char *foo;
public:
   instanz_demo (const char *c) : foo(new char[strlen(c)+1]) { strcpy(foo,c); }
   instanz_demo () : foo(0) {}
   ~instanz_demo () { delete [] foo; }
   const char *get_foo () const { return foo; }
   void set_foo (const char *c) { delete [] foo; foo = new char[strlen(c)+1]; strcpy(foo,c); }
};
 
int main () {
    bar2::set_foo("Hello World!"); //bar2::foo muss erst mit etwas gefüllt werden
    cout << bar::get_foo() << '\n'
         << bar2::get_foo() << '\n';
 
    //aber:
    instanz_demo instanz; //erzeuge eine instanz von instanz_demo!
    instanz.set_foo ("Hello World!");
 
    //und:
    instanz_demo andere("Hello World (andere Instanz)"); //erzeugt eine ANDERE instanz von instanz_demo
   
     cout << instanz.get_foo() << " versus " << andere.get_foo() << '\n';
}

Eine Klasse ist nur eine Schablone, du musst erst eine Instanz erzeugen, um mit 'ihr' arbeiten zu können, oder du machst die Methoden static

_________________
"'What sort of person,' said Salzella patiently, 'sits down and writes a maniacal laugh? And all those exclamation marks, you notice?
Five? A sure sign of someone who wears his underpants on his head.[']"
- Terry Pratchett, Maskerade
lunatic82
Mitglied

Benutzerprofil
Anmeldungsdatum: 29.10.2001
Beiträge: 78
Beitrag lunatic82 Mitglied 15:15:00 04.05.2003   Titel:              Zitieren

Danke für die schnelle Antwort, das ist genau das was ich gesucht habe. :)
c++.de :: C++ (auch C++0x und C++11) ::  Klassen und Rückgabewerte von Methoden   Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum antworten.
Sie können Ihre Beiträge in diesem Forum nicht bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum nicht mitmachen.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.de ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info und www.c-plusplus.net enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.