058 TIF

058 TIF



Operator dodawania wprowadza duży narzut .

pisanie czytelnego kodu

Kod źródłowy

Napis operator+(const Napis&napis) const

{

Napis napisNowy(m_pch);

napisNowy.Dołącz(napis.m„pch, napis.m_cch);

return napisNowy;

}

Przy tworzeniu operatora dodawania {+) dzieje się wiele rzeczy. W podanym przykładzie budujemy nową klasę napisów. Dwa napisy są konkatenowane i tworzą nowy napis. Następnie kompilator automatycznie umieszcza egzemplarz napisu w ramce stosu funkcji wywołującej. Będzie on użyty do utworzenia wartości zwrotnej. Konstruktor kopiowania jest wywoływany ze zmienną napisNowy jako parametrem i kopiuje jej zawartość do zmiennej zwrotnej. Przed wyjściem z funkcji zmienna napisNowy zostaje usunięta.

Gdybyśmy połączyli dwa napisy bezpośrednio za pomocą operacji Dołącz, to uzyskalibyśmy większą wydajność. W tym wypadku natomiast operator utworzył dwa egzemplarze tymczasowych zmiennych napisowych i wywołał konstruktor kopiowania.

Oto wygenerowany kod operatora.

00401791

lea

00401794

push

00401795

mov

00401798

cali


0040179D

mov

004017A0

or

004017A3

mov

004017A6

mov

0017AA

lea

004017AD

cali

004017B2

mov

145: }

004017B5

mov


eax,dword ptr [napisNowy] eax

ecx,dword ptr [__$R.eturnUdt] ;zmienna napisowa, do której

zostaje zwrócony napis po konkatenacji @ILT+75(??0Napis@@QAE@ABV0@@Z)(OxO04O1O4b) ;konstruktor kopiowania na tej zmiennej z napisNowy jako parametrem

ecx,dword ptr [ebp-1 Ch] ecx,1

dword ptr [ebp~1Ch],ecx

byte ptr [ebp~4],0

ecx,dword ptr [napisNowy]

@ILT+15(MNapis@@QAE@XZ)(Ox0040100f) destruktor napisNowy, gdyż jest to zmienna automatyczna eax,dword ptr [__$ReturnUdt]

ecx,dword ptr [ebp-OCh]


Wyszukiwarka

Podobne podstrony:
070 TIF virtua! ~lntelWskPodst(){ rf(m_pt) delete m_pt; m_pt = NULL;} T &operator*() const{ retu
093 TIF Tworzenie stałych operatorów 80 kompilowanie kodu Przed class Napis { char & operator[]
100 tif 1002. STROPODACHY 2.1. WPROWADZENIE Stropodach stanowi poziomą lub pochyłą zewnętrzną przegr
140 TIF char *m_pch; public: int operator==(const Napis& napis) const{ return(strcmp(m_pch, napi
227 TIF const String& operator+=(const String& string){ Append(string.m_pch, string.m_cch);
057 TIF Operator new generuje bardzo dużo kodu. Jak widać w pokazanym fragmencie kodu maszynowego, n
PISANIE Ii II ROK 120 godzin Cele kształcenia Wprowadzenie słuchaczy w proces pisania i wyjaśnienie

więcej podobnych podstron