Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Zwracanie nie-stałego ciągu znaków poprzez stałą metodę

Ostatnio zmodyfikowano 2020-11-23 18:15
Autor Wiadomość
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:

C/C++
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.

C/C++
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?
P-177736
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.
P-177738
« 1 »
  Strona 1 z 1