2013-10-25 59 views
1

我試圖理解這個例子中,我們在課堂上沒有,但遇到一些麻煩......瞭解C++類和函數調用

對於上課的時候,這個類的一個實例是由小時,分鐘,秒的

所以

Time labStart(10,30,0); 
Time labEnd (12,20,0); 

(labEnd-labStart).printTime() //I'm not concerned with the printTime function 

const Time Time::operator - (const Time& t2) const { 

    int borrow=0; 
    int s=secs-t2.secs; 

    if (s<0) { 
    s+=60; 
    borrow=1; 
    } 

    int m=mins-t2.mins2-borrow; 
    if (m<0) { 
    m+=60; 
    borrow=1; 
    } 
    else 
     borrow=0; 

    int h= hrs-t2.hrs-borrow; 
    if (h<0) { 
    h+=24; 

    Time tmp=Time(h,m,s); 
    return tmp; 
} 

所以,如果我們傳遞兩個labEnd和labStart,有人告訴我(labEnd-labStart)〜labEnd.operator-(labStart)

我不明白如何以及在何處labEnd的變量是否被考慮?在上面的函數中,只有一個Time參數被傳入labStart,因此t2.mins t2.sec爲labStarts分鐘和秒(分別爲30分鐘和0秒),但是labEnd的變量(12,20,0) ?? (實例變量小時,分鐘,秒)?

回答

2

在您的功能this是指向&labEnd。裸露的secs,minshrs提到在它們前面有一個隱含的this->。如果你寫出來的this->的明確三個變量聲明變成:

int s = this->secs - t2.secs; 
int m = this->mins - t2.mins - borrow; 
int h = this->hrs - t2.hrs - borrow; 
0
labEnd - labStart 

等同於:

labEnd.operator -(labStart) 

所以labEnd是在成員函數this,它的成員變量像普通變量一樣被訪問。