2011-06-04 61 views
0

我想在另一個類的另一個函數方法中運行類的函數方法。我編寫了下面的代碼作爲示例,它編譯並返回期望的值。我的問題是,如果這是預成型類方法的計算內的另一個類方法的正確方法...在另一個類方法中運行類方法

問候

#include <iostream> 

class CBoo { 
public: 
    CBoo(); 
    void Test(); 
    void Plot(); 

private: 
    int b; 
}; 

CBoo::CBoo() { 
    b = 3; 
} 

void CBoo::Test() { 
    b++; 
} 

void CBoo::Plot() { 
    std::cout << "b: " << b << std::endl; 
} 

class CFoo { 
public: 
    CFoo(); 
    void Test(CBoo &Boo); 
    void Plot(); 

private: 
    int a; 
}; 

CFoo::CFoo() { 
    a = 3; 
} 

void CFoo::Test(CBoo &Boo) { 

    for (int i = 0 ; i < 10 ; i++) { 
       a++; 
       Boo.Test(); 
    } 
} 

void CFoo::Plot() { 
    std::cout << "a: " << a << std::endl; 
} 

int main() { 

    CFoo Foo; 
    CBoo Boo; 

    Foo.Test(Boo); 

    Foo.Plot(); 
    Boo.Plot(); 

    return 0; 

} 

回答

5

有兩種簡單的方法可以做到這一點。其中之一,您選擇的是將外部類對象傳遞給另一個對象方法。另一種是將對象封裝在另一個對象中,並直接從封閉類的方法中調用它。

可能有更深奧的方法來做到這一點,但你選擇的方法是完全合理的。您選擇哪個選項是基於您的程序的體系結構。

3

看上去完全合理的我。

2

您正在使用的方法不是類方法。通常,類/靜態方法意味着與類的任何特定實例都沒有關聯的方法,而是它們與類本身相關聯。在C++中,靜態用於此。

您正在使用的方法稱爲實例方法。你使用它的方式非常好。而不是傳遞一個參數,您可以像Greg指出的那樣在課堂中提供參考。這一切都取決於你的需求。如果該方法僅在一種方法中需要,或者如果您使用Boo的不同實例爲CFoo.Test,則應將它們作爲參數傳遞。但是,如果您只需要一個Boo實例,那麼您可以在CFoo中創建該實例並在所有方法中使用該實例。你會做什麼取決於你的需要。

我對代碼的唯一反對意見是變量的命名。慣例是使用小寫字母來表示對象/方法和大寫來表示類。所以參數Boo應該被命名爲boo

+1

關於類方法和實例方法的優點。 – Greg 2011-06-04 07:48:43

+0

我同意,即使更清楚地命名測試代碼也是一個好主意,但我會指出命名約定不是通用的。 – Greg 2011-06-04 07:49:10

+0

@Greg,是的,他們不是普遍的。在方法中使用資本的語言/框架/書籍。但是在C++/Java/Obj-C/AS3中,這個約定大多被遵循。 – taskinoor 2011-06-04 07:51:49

相關問題