Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » const im parameter

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
30.06.2004, 15:19 Uhr
~th3hamm0r
Gast


hi...zeitweise glaub ich das ich const verstehe und dann zerfällt wieder alles an diesem beispiel :/


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

class Mitarbeiter
{
public:
    Mitarbeiter(const char *nm) { // dies sollte eigentlich nur zum lesen sein
        nm = "meier"; // und wieso kann ich nm dann aber doch ändern??
        strncpy(name, nm, 30);
        name[29] = '\0';
    }

    char *getName() {
        return name;
    }
private:
    char name[80];
};

int main()
{
    Mitarbeiter meier("Meier");
    cout << meier.getName(); // gibt meier aus... aber keinen fehler hm..

    cin.get();
    return 0;
}



ich weiß nicht... irgendwas hab ich noch nicht ganz verstanden...
was mich auch verwirrt... wenn ich jetzt
*nm = "meier";
schreibe, wäre es so wie ich es anfangs in dem buch, von welchem ich lerne, gestanden ist... hier kommt ja der fehler das man const char* nicht in char * wandeln kann...

aber in vielen beispielen sehe ich aber nirgens mehr vor jeder varialbe dieses typs ein *
sind das fehler?

ich hoffe ihr versteht mein geschreibe^^

thx hamm0r
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
30.06.2004, 15:27 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)



C++:
Mitarbeiter(const char *nm) { //  das const heisst in diesem falle das der zeiger nm selbst konstant ist nicht der inhalt auf den er zeigt... das heisst du kannst nm selber nicht neu zuweisen...



@Unwissender
Who needs const?
--
...fleißig wie zwei Weißbrote

Dieser Post wurde am 30.06.2004 um 15:27 Uhr von Windalf editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
30.06.2004, 15:27 Uhr
~th3hamm0r
Gast


wenn ich jetzt den code ohne dem * schreibe hebe ich ja diesen schutz gegen das überschreiben der var auf...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
30.06.2004, 15:32 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


dann hast du auch keinen zeiger mehr...
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
30.06.2004, 15:43 Uhr
freshman



um auf deine Originalfrage zurückzukommen:
du meintest bestimmt einen read-only-Bezeichner:

C++:
Mitarbeiter(char *nm)const{
...
}
char * getName()const{
...
}


--
freshman.say("Wer nicht an Wunder glaubt ist kein Realist!\a");
while(1)freshman.ask(sillyQuestion);
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
30.06.2004, 15:53 Uhr
~th3hamm0r
Gast


gut das du das anredest....


C++:
char * getName() const{
    return name;
}



das funktioniert nicht...
"error C2440: 'return' : 'const char [80]' kann nicht in 'char *' konvertiert werden"

wenn ich nur einen buchstaben oder so zurückgebe funktioniert es.... aber selber ein array zurückgeben funktioniert nicht...


C++:
char getBuch() const{
    return name[1];
}

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
30.06.2004, 15:56 Uhr
freshman



sorry, habe gar nicht gesehen, daß Mitarbeiter ja ein Konstruktor ist, natürlich ohne const
--
freshman.say("Wer nicht an Wunder glaubt ist kein Realist!\a");
while(1)freshman.ask(sillyQuestion);
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
30.06.2004, 16:09 Uhr
freshman



probier mal

C++:
string getName()const{
    return name;
}


header nicht vergessen einzubinden
aber wirklich nur bei der Methode den Rückgabetyp ändern, die Definition des Attributes bei char * lassen
--
freshman.say("Wer nicht an Wunder glaubt ist kein Realist!\a");
while(1)freshman.ask(sillyQuestion);
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
30.06.2004, 16:54 Uhr
(un)wissender
Niveauwart


Na, da bin ich wohl dran.
const char * pm, meint nur, dass du den Inhalt, also das auf das der Pointer zeigt, nicht ändern darfst.
Den Pointer selber kann du verändern, was du ja auch tust.
Wenn du einen konstanten Pointer haben willst, dann musst du char * const pm schreiben. const char * const pm ist konstanter Pointer mit konstantem Inhalt. Macht hier aber keinen Sinn, weil der Pointer eh per value übergeben wird, es also nichts macht, wenn du ihn veränderst.

@Windalf
Ich sage es noch mal, ohne const ist Code eventuell nicht kompilierbar, obwohl er es sein sollte.
Bspw. kann ein wirklich konstantes Objekt nicht an Funktionen, die den formalen Parameter nicht als const deklarieren, übergeben werden, obwohl diese Funktion den Parameter nur liest und nicht verändert.
--
Wer früher stirbt ist länger tot.

Dieser Post wurde am 30.06.2004 um 16:54 Uhr von (un)wissender editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
30.06.2004, 17:30 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


upsi da hab ich wohl "gaaaanz ausversehen" einen nerv getroffen
--
...fleißig wie zwei Weißbrote
 
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: