2009-06-11 129 views
26

我在類中爲a()寫了一個方法(工作正常)。我想寫的另一種方法在該類中調用的第一個方法,以便:從另一個方法調用C++中同一個類的方法

void A::a() { 
    do_stuff; 
} 

void A::b() { 
    a(); 
    do_stuff; 
} 

我想我可能只是重寫b()所以b(A obj),但我不想。在Java中你可以做些什麼,如this.a()

我想要做obj.b()其中obj.a()將被稱爲obj.b()的結果。

+2

你能澄清你想要的嗎? – 2009-06-11 20:07:54

+0

哦哎呀!我有一個不同的錯誤導致這一點 - 我剛剛修復。 – devin 2009-06-11 20:12:06

回答

4

它看起來像你在你的塊寫的代碼將工作得很好。只要確保你的類中正確定義了a()和b()方法。

2

你在那裏寫的應該沒問題。在C++中,如果您在b內調用a,並且兩者都是某個類A的實例方法,那麼您無需對其進行限定。 ab都在彼此的範圍內。

29

你有什麼應該可以正常工作。您可以使用 「本」,如果你想:

void A::b() { 
    this->a(); 
    do_stuff; 
} 

void A::b() { 
    this->A::a(); 
    do_stuff; 
} 

void A::b() { 
    A::a(); 
    do_stuff; 
} 

,但你有什麼也要工作:

void A::b() { 
    a(); 
    do_stuff; 
} 
2

有一種情況,你可能會有一些意想不到的結果。即如果A::a()是虛擬的,obj實際上具有類型DerivedFromA,並且DerivedFromA :: a覆蓋A::a。在這種情況下,簡單的調用a();或更詳細的this->a();將不會調用A :: a而是調用DerivedFromA :: a()。

現在,這可能是有意的,因爲A類聲明爲()是虛擬的。但是,如果你真的不是這個意思,你可以通過撥打電話來忽略這個虛擬行爲

void A::b() 
{ 
    A::a(); // or 
    this->A::a(); //Both ignore the virtual-ness of a() 
}  
相關問題