考虑以下:
namespace MyNamespace{
class MyClass {
public:
// Public area
private:
// Private area
protected:
// Protected area
}; /* Class */
} /* Namespace */
Run Code Online (Sandbox Code Playgroud)
并且考虑我想定义一个特定于我的类的常量.我通常会做以下事情:
namespace MyNamespace{
// Constants
const int MYINT = 12;
const std::string MYSTR = std::string("Hello");
// Class definition
class MyClass {
public:
// Public area
private:
// Private area
protected:
// Protected area
}; /* Class */
} /* Namespace */
Run Code Online (Sandbox Code Playgroud)
通过这种方式,我可以通过这种方式获取变量(在我的代码中的某个地方):
MyNamespace::MYINT;
MyNamespace::MYSTR;
Run Code Online (Sandbox Code Playgroud)
这是一个好习惯吗?考虑到常量可以用多种方式处理(例如数字常量通常用于处理enum),定义常量的最佳方法是什么(与类相关,但在其他地方也有用)?
谢谢
Naw*_*waz 24
如果你想要特定于类的常量,并希望它们在你说的其他地方有用,可能在类之外,那么在类static的public部分中将它们定义为成员数据:
//.h file
class MyClass
{
public:
//constants declarations
static const int MYINT;
static const std::string MYSTR;
};
//.cpp file
//constants definitions
const int MyClass::MYINT = 12;
const std::string MyClass::MYSTR = std::string("Hello");
Run Code Online (Sandbox Code Playgroud)
用法(或访问):
std::cout << MyClass::MYINT << std::endl;
std::cout << MyClass::MYSTR << std::endl;
Run Code Online (Sandbox Code Playgroud)
输出:
12
Hello
Run Code Online (Sandbox Code Playgroud)
在线演示:http://www.ideone.com/2xJsy
enum如果要定义许多积分常量,并且所有这些常量都以某种方式相关,也可以使用,例如:
class shirt
{
public:
//constants declarations
enum shirt_size
{
small,
medium,
large,
extra_large
};
};
Run Code Online (Sandbox Code Playgroud)
但是如果积分常数不相关,那么enum在我看来将它们定义为没有多大意义.
不存在“最佳”解决方案,因为这当然是一个非常主观的术语。
考虑到您提到在其他地方使用的常量,我们可以说它们应该在类的部分中声明protected(如果它们仅由派生类使用)或更可能在public类的部分中声明。
非整数类型的常量应定义为成员(但如果有任何其他静态对象引用这些常量,则static const必须注意静态初始化的顺序)。
正如您已经提到的,整数类型的常量可以声明为static const int或枚举。这里的区别因素是两个或多个常数是否可以逻辑上分组在一起。
例如,这可能是一个好主意:
class MyClass {
public:
enum {
Color_Red,
Color_Green,
Color_Blue,
};
};
Run Code Online (Sandbox Code Playgroud)
虽然这不是:
class MyClass {
public:
enum {
Color_Red,
Vehicle_Car,
};
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
25007 次 |
| 最近记录: |