• 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 >>

Cloud VPS
0 głosów
197 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 (155,180 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ź 632 wizyt
pytanie zadane 7 kwietnia 2023 w C i C++ przez Zuzan Początkujący (390 p.)
0 głosów
1 odpowiedź 604 wizyt
pytanie zadane 7 maja 2020 w C i C++ przez Hubertius Bywalec (2,970 p.)
0 głosów
1 odpowiedź 729 wizyt
pytanie zadane 1 maja 2020 w C i C++ przez Hepsko Początkujący (260 p.)

93,456 zapytań

142,451 odpowiedzi

322,721 komentarzy

62,837 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

Kursy INF.02 i INF.03
...