2011-02-19 34 views
0

我有一個問題。我有一個隨機數函數,我想讓所有的類都可用。在整個項目中可以看到的一種方法

在主,

我具備的功能

int RandomRange(int min, int max) 
{ 
    int newValue = (rand() % max) + min; 

    if (newValue > max) 
     newValue = max; 
    if (newValue < min) 
     newValue = min; 

    return newValue; 
} 

但我想我的班才能夠使用此功能。我如何去做類似的事情?

回答

4

創建標題:

#ifndef RANDOM_RANGE_H_INLCUDED_ 
#define RANDOM_RANGE_H_INLCUDED_ 

int RandomRange(int, int); 

#endif 

然後包括需要使用的功能的任何文件頭。

當你有時間的時候,你可能想寫一個更好的函數implementation

1

聲明它是一個頭文件中的獨立函數,然後它來自任何地方的#include

0

「只在頭文件中放置一個聲明」的答案是正確的,但也值得知道,您可以避免使用單獨的源文件進行定義,並將相應的.o文件連接起來,方法是將其放入頭文件:

inline int RandomRange(int min, int max) 
{ 
    int newValue = (rand() % max) + min; 
    // etc... 
} 

這是簡單的,但同時也意味着,包括文件的每個源文件將必須處理完整定義時,它的編制,也使得包括本文件中的每個源文件將必須處理<cstdlib> ,該文件需要包含以便撥打rand()

對於像<cstdlib>那樣基本的小函數和頭文件,過早地進行優化是擔心編譯時間對整個構建的影響,儘管在更改頭文件時會明顯影響部分構建。也有功能性的一些問題,雖然 - 如果你這樣做,那麼:

(a)在使用這個頭文件和鏈接必須使用RandomRange相同的定義共同目標文件,所以更改的內容函數體打破鏈接兼容性。預處理後的完全相同 - 本例中沒有使用宏,因此無論哪種方式都是一樣的,但可能會在這裏出錯。 (b)僅通過鏈接包含不同定義(用於調試,測試或鏈接時應用程序可配置性)的不同對象文件,不能替換RandomRange的定義。

對於小功能和小項目,這些缺點通常不是問題。對於大型函數和大型項目,通常至少有一些是,這就是爲什麼標準安全的事情是有單獨的聲明和定義。

相關問題