| Autor |
Nachricht |
lunatic82
Mitglied
Benutzerprofil
Anmeldungsdatum: 29.10.2001
Beiträge: 78
|
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
|
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
|
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
|
lunatic82 Mitglied
15:15:00 04.05.2003 Titel: |
|
Zitieren |
Danke für die schnelle Antwort, das ist genau das was ich gesucht habe. |
|
|
|
 |
|
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.
|
|
|
|
|