Zwracanie nie-stałego ciągu znaków poprzez stałą metodę
Ostatnio zmodyfikowano 2020-11-23 18:15
Nihon13 Temat założony przez niniejszego użytkownika |
Zwracanie nie-stałego ciągu znaków poprzez stałą metodę » 2020-11-23 15:25:55 Jako iż doktor (sic!) na uczelni popełnia tak rażące błędy i nie potrafi ich wytłumaczyć (wykłady prowadzi w wordzie, chyba celowo, żebyśmy nie zauważyli błędów w kodzie) to zwracam się do kompetentnych osób tutaj. Sytuacja jest następująca: mamy prostą klasę, w której mamy prywatny składnik, który jest tablicą znaków o określonym rozmiarze. I mamy typowego gettera, który zwraca tą tablice, z zaznaczeniem, że jest to metoda, która nie zmienia składnika, czyli metoda const. No i doktor pisze tak: class Klasa { char tekst[ 20 ]; public: char * getTekst() const; };
char * Klasa::getTekst() const { return tekst; }
Co wywala błąd. Natomiast poprawiłem ten kod, żeby działał co można zrobić np w ten sposób. class Klasa { char * tekst; public: char * getTekst() const; };
char * Klasa::getTekst() const { return tekst; }
Można też zostawić char tekst[20], ale usunąć const z nagłówka funkcji, wtedy też zadziała. Pytanie moje jest następujące: dlaczego z technicznego punktu widzenia ta druga metoda działa, a pierwsza nie? |
|
pekfos |
» 2020-11-23 18:15:25 Metoda const znaczy że operuje na stałym obiekcie (nie musi być utworzony jako stały, ale dla jej potrzeb taki jest). Tablica która jest składową klasy wtedy też jest stała, a próbujesz zwrócić jej adres z pominięciem tego faktu. Powinno być zwracane const char*. W drugim przypadku analogicznie, ale stały jest sam wskaźnik i nic nie stoi na przeszkodzie żeby po prostu zwrócić jego wartość, nie narażasz go w ten sposób na modyfikację. Pomijając poprawność, pierwszy kod ma więcej sensu bo zwraca wskaźnik na zarezerwowaną pamięć, a Twój zwraca niezainicjalizowany wskaźnik, więc w praktyce błędny. |
|
« 1 » |