我在類中爲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()
的結果。
我在類中爲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()
的結果。
這正是你在做什麼。
它看起來像你在你的塊寫的代碼將工作得很好。只要確保你的類中正確定義了a()和b()方法。
你在那裏寫的應該沒問題。在C++中,如果您在b
內調用a
,並且兩者都是某個類A
的實例方法,那麼您無需對其進行限定。 a
和b
都在彼此的範圍內。
你有什麼應該可以正常工作。您可以使用 「本」,如果你想:
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;
}
有一種情況,你可能會有一些意想不到的結果。即如果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()
}
你能澄清你想要的嗎? – 2009-06-11 20:07:54
哦哎呀!我有一個不同的錯誤導致這一點 - 我剛剛修復。 – devin 2009-06-11 20:12:06