2011-02-19 35 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的定义。

对于小功能和小项目,这些缺点通常不是问题。对于大型函数和大型项目,通常至少有一些是,这就是为什么标准安全的事情是有单独的声明和定义。

相关问题