• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Domyślny konstruktor, dynamiczna alokacja pamięci, operator >>

Object Storage Arubacloud
0 głosów
148 wizyt
pytanie zadane 1 kwietnia 2020 w C i C++ przez amtrax Dyskutant (9,630 p.)

Cześć, 

w jednym z podręczników do programowania konstruktor domyślny pewniej klasy  zdefiniowany jest  następująco :

String::String()
{
    len = 4; //len sluzy  do okreslania dlugosci ciagu
    str = new char[1];
    str[0] = '\0';
}

Dla tej samej klasy zdefiniowane jest przeciążenie operatora wczytywania >>

istream & operator >>(istream & is,  String & st)
{
    char temp[String::CINLIM]; //CINLIMIN = 80
    is.get(temp,String::CINLIM);
    if(is);
        st = temp;
    while (is && is.get() !='\n')
        continue;
    return is;
}

Jeżeli stworzymy obiekt, do którego inicjazliacji wykorzystano konstruktor domyślny i potem spróbujemy wczytać dane do tego obiektu za pomocą przeciążonego operatora wszystko będzie działać poprawnie. Dlaczego tak jest, przecież zaalokowaliśmy w pamięci jednoelementową tablice char, a wczytujemy załóżmy 20 znaków. Mimo tego program działa prawidłowo.

 

Pozdrawiam 

1 odpowiedź

0 głosów
odpowiedź 1 kwietnia 2020 przez tangarr Mędrzec (154,780 p.)
wybrane 1 kwietnia 2020 przez amtrax
 
Najlepsza

Zauważ, że w kodzie jest przypisanie

st = temp;

spowoduje ono wywołanie operatora przypisania klasy String

String &operator= (const char[String::CINLIM])

lub

String &operator= (const char*)

i to tam musisz szukać odpowiedzi na pytanie co się tak na prawdę dzieje

komentarz 1 kwietnia 2020 przez amtrax Dyskutant (9,630 p.)

Racja! Teraz już wszystko jasne laugh

String & String::operator =(const char* s)
{
    if(this->str == s)   
        return *this;
    delete [] str;
    len = strlen(s);
    str = new char [len+1];
    strcpy(str, s);
    return *this;
}

 

Podobne pytania

0 głosów
1 odpowiedź 274 wizyt
pytanie zadane 7 kwietnia 2023 w C i C++ przez Zuzan Początkujący (390 p.)
0 głosów
1 odpowiedź 428 wizyt
pytanie zadane 7 maja 2020 w C i C++ przez Hubertius Bywalec (2,970 p.)
0 głosów
1 odpowiedź 431 wizyt
pytanie zadane 1 maja 2020 w C i C++ przez Hepsko Początkujący (260 p.)

92,551 zapytań

141,393 odpowiedzi

319,523 komentarzy

61,936 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...