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

Deklaracja metody at(size_type)

Ostatnio zmodyfikowano 2016-11-09 18:28
Autor Wiadomość
latajacaryba
Temat założony przez niniejszego użytkownika
Deklaracja metody at(size_type)
» 2016-11-09 17:59:24
Witam. Zacznę od tego, że poszukiwałem odpowiedzi na pytanie "jak działa metoda at". Bo w Symfonii deklaracja jest zapisana jako 'referencja_do_znaku at(size_type pozycja)'. Co ma oznaczać ta "referencja_do_znaku"? Autor opisał, że rezultatem funkcji jest referencja do znaku. Dlatego postanowiłem napisać testową klasę i sprawdzić to:
C/C++
class X
{
public:
    char * tab;
    char & funkcja( int p )
    {
        return tab[ p ];
    }
};
int main()
{
    X c;
    c.tab = "cstring";
    cout << c.funkcja( 5 );
}
No i wszystko pięknie działo do tego momentu. Funkcja zwróciła znak 'n'.
Gorzej kiedy zrobiliśmy tak:
c.funkcja(5) = 'x';
Błąd krytyczny.
Okazało się, że nie można modyfikować poszczególnych znaków w c-stringa. Mam 2 pytania.
1) dlaczego nie można modyfikować znaków?
2) jak w takim razie wygląda i działa ta metoda?
P-153507
pekfos
» 2016-11-09 18:15:53
"cstring" to stała. Już samo przypisanie jej do wskaźnika char* jest błędem. Użyj w klasie tablicy, a nie wskaźnika..
C/C++
char tab[ 100 ];

X()
{
    strcpy( tab, "cstring" );
}
P-153508
latajacaryba
Temat założony przez niniejszego użytkownika
» 2016-11-09 18:18:29
Ok. A czy typem tej metody jest char&?
P-153510
pekfos
» 2016-11-09 18:22:43
P-153512
latajacaryba
Temat założony przez niniejszego użytkownika
» 2016-11-09 18:28:04
If the string object is const-qualified, the function returns a const char&. Otherwise, it returns a char&.
Alles klar.
Wydaje mi sie, że byłem na tej stronie ale nie wiem jak mogłem to przeoczyć. Dzięki za pomoc :D
P-153513
« 1 »
  Strona 1 z 1