Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

const ili ne ?

[es] :: C/C++ programiranje :: const ili ne ?

[ Pregleda: 2553 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Pretender

Član broj: 12407
Poruke: 100
*.beotel.net



Profil

icon const ili ne ?05.11.2003. u 17:43 - pre 248 meseci
SOS

Code:
124:   // creates a new string by adding current
125:   // string to rhs
126:   String String::operator+(const String& rhs)
127:   {
128:      int  totalLen = itsLen + rhs.GetLen();
129:      String temp(totalLen);
130:      int i, j;
131:      for (i = 0; i<itsLen; i++)
132:         temp[i] = itsString[i];
133:      for (j = 0; j<rhs.GetLen(); j++, i++)
134:         temp[i] = rhs[j];
135:      temp[totalLen]='\0';
136:      return temp;
137:   }

Citat:
Because operator+ is not (and can't be) a const function (it changes the object it is called on), attempting to write the following will cause a compile-time error:

String buffer = Edie.GetFirstName() + Edie.GetLastName();

GetFirstName() returns a constant String, and you can't call operator+ on a constant object.
Code:
1:     class Employee

11:       const String & GetFirstName() const 
12:          { return itsFirstName; }

24:    private:
25:       String    itsFirstName;

Zasto ne mozemo da pozovemo operator + , sa konstantnim objektom ?
Kako to ovaj operator menja objekat za koji je pozvan, kada od dva niza (kakva god) pravi NOVI ?


Ovo je razumljivo u slucaju operatora += , koji stvarno menja niz iz kojeg je pozvan, pa je njegov return , modifikovan TAJ niz :
Code:
139:   // changes current string, returns nothing
140:   void String::operator+=(const String& rhs)
141:   {
142:      unsigned short rhsLen = rhs.GetLen();
143:      unsigned short totalLen = itsLen + rhsLen;
144:      String  temp(totalLen);
145:      for (int i = 0; i<itsLen; i++)
146:         temp[i] = itsString[i];
147:      for (int j = 0; j<rhs.GetLen(); j++, i++)
148:         temp[i] = rhs[i-itsLen];
149:      temp[totalLen]='\0';
150:      *this = temp;
151:   }

Ali, kod operatora + , cini se da stvari stoje malo drugacije.


Txx
 
Odgovor na temu

milanche
San Francisco

Član broj: 2447
Poruke: 1200
*.lsil.com



+1001 Profil

icon Re: const ili ne ?05.11.2003. u 20:47 - pre 248 meseci
Obrati paznju:

Operator se poziva 'NA' nekom objektu. U ovom slucaju, kad stringu A hoces
da konkateniras string B, onda NA objektu (stringu) A zoves '+' operator, koji tom istom stringu (A) konkatenira sadrzaj stringa B.

Ako je, medjutim, string A deklarisan kao konstantan, kompajler ce da vristi naglas, jer ako je A konstantan, ne moze mu se nista 'prishivati'. Sve sto je
deklarisano 'const' ne moze da se menja at run-time.
 
Odgovor na temu

Pretender

Član broj: 12407
Poruke: 100
*.beotel.net



Profil

icon Re: const ili ne ?05.11.2003. u 22:14 - pre 248 meseci
Uh, da vidimo:

Ovde je, u stvari, pitanje, da li stringovi `sabirci`, posle sabiranja, nastavljaju
da egzistiraju ili ne.
Ako je odgovor NE, onda je jasno ovo oko konstanti, ali nije bas, zasto NE.
 
Odgovor na temu

Cybernoid II

Član broj: 14852
Poruke: 528

Sajt: www.youtube.com/watch?v=7..


+1 Profil

icon Re: const ili ne ?05.11.2003. u 23:02 - pre 248 meseci
meni ovo radi
Code:
Buffer Buffer::operator+(const Buffer& rhs) const
{
    Buffer temp;
    size_t totalsize=m_size+rhs.m_size; //  ! overflow
    temp.setSize(totalsize);
    memcpy(temp.m_pData,m_pData,m_size);
    memcpy(&((temp.m_pData)[m_size]),rhs.m_pData,rhs.m_size);
    if(temp.m_pData)  
        (temp.m_pData)[totalsize]='\0';
    return temp;
}


......

const Buffer a;
const Buffer b;
Buffer c;
c=a+b;



#!/usr/bin/basho
mv frog ancient_pond
echo "Splash!"
 
Odgovor na temu

[es] :: C/C++ programiranje :: const ili ne ?

[ Pregleda: 2553 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.