2014-01-09 94 views
0

我想使用一個函數(讓我們稱之爲「循環」),除其他外,它負責增加一個變量,它代表了我的程序自啓動以來執行的迭代次數是一個FDTD模擬)。我需要在我的程序的另一個函數中使用這個迭代器變量來做出決策,例如,如果完成了一定次數的迭代,就執行一些操作。我知道如何通過引用從main傳入一個變量到一個函數中,但我不知道如何使用另一個函數調用main來檢查這個變量的值。消息傳遞在C++函數

這使我以下的問題:

  1. 如果我傳遞變量通過引用到這兩個功能,都將有自己的變量在任何時候都最近的副本?

  2. 如果我使用一個全局變量定義在主外(我知道這是不好的做法),函數可以修改該變量的值嗎?如果它需要通過引用來傳遞函數,那麼這怎麼做呢?

  3. 是否有其他方法來維護一個同步,正確的變量值可用於兩個或更多的函數,不涉及上述方法之一?

回答

1

如果我傳遞變量通過引用到這兩個功能,都將有自己的變量在任何時候都最近的副本?

他們會引用相同的變量,因此,是的。當其中一個修改變量時,另一個將能夠讀取新的「同步」值。

如果我使用一個在main之外定義的全局變量(我知道這是不好的做法),函數是否可以修改該變量的值?

是的,但不要使用全局變量。

如果它需要通過引用傳入一個函數,怎麼做?

這是因爲在接收到輸入到函數作爲參考一樣簡單:

void func(int&); // example 
//   ^ 

有一些其他的方式來保持同步,正確的變量提供給兩個或兩個以上的功能值,該值不涉及上述方法之一?

這可能是一個更好的主意,有一類,而不是,所以,你也可以從外部編輯保護您的同步變量:

class your_class { 
private: 
    T synchronized; 
public: 
    void func_one(); 
    void func_two(); 
}; 

,但它真的取決於你實際上是試圖完成。

+0

您可否詳細說明在類中使用私有變量和公共變量的有用性?我在編程方面並不完全是初學者,但是到目前爲止,我已經接受了使用函數式編程風格進行科學應用程序的培訓,所以這對我來說是陌生的領域。 – Scott

+0

@Scott,類的'public'部分是它的*接口*(你想從類的外部調用和使用); 'private'部分是它的*實現*,也就是類的用戶不需要知道的東西。 – Shoe

0

我知道如何通過從主引用傳遞變量到一個函數,但我看不出它如何可能再檢查使用其他功能也從主稱這個變量的值。

是的,你可以在兩個不同的函數中訪問相同的變量。因爲你的兩個函數被main()依次調用。如果你的工作是用於模擬的,可能不需要全局的。

main() 
{ 
int cnt; 
loop(int &cnt) 
action(int &cnt) 
} 

您可以通過全局變量實現相同。