请考虑以下事项:
namespace MyNamespace{
class MyClass {
public:
// Public area
private:
// Private area
protected:
// Protected area
}; /* Class */
} /* Namespace */
并且考虑我想定义一个特定于我的类的常量。 我通常会做以下事情:
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 */
通过这种方式,我可以用这种方式获取我的变量(在我的代码中的某个地方):
MyNamespace::MYINT;
MyNamespace::MYSTR;
这是一个好习惯吗?
考虑到常量可以用多种方式处理(例如数字常量通常使用enum
处理),定义常量的最佳方法是什么(与类相关,但在其他地方也可以使用)?
三江源
答案 0 :(得分:21)
如果你想要特定于该类的常量,并且希望它们在你所说的其他地方有用,可能在课外,那么在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");
成员数据。班级:
std::cout << MyClass::MYINT << std::endl;
std::cout << MyClass::MYSTR << std::endl;
用法(或访问):
12
Hello
输出:
enum
在线演示:http://www.ideone.com/2xJsy
如果你想定义许多积分常数并且它们都以某种方式相关,你也可以使用class shirt
{
public:
//constants declarations
enum shirt_size
{
small,
medium,
large,
extra_large
};
};
,例如:
enum
但是如果积分常数不相关,那么在我看来将它们定义为{{1}}是没有多大意义的。
答案 1 :(得分:3)
当然,没有“最佳”解决方案,这是一个非常主观的术语。
考虑到你提到在其他地方使用的常量,我们可以说它们应该在protected
中声明(如果它们只由派生类使用)或更可能是{{1}该课程的一部分。
非整数类型的常量应定义为public
成员(但如果有任何其他静态对象,则必须小心order of static initialization 参考这些常数)。
正如您已经提到的,整数类型的常量可以声明为static const
或枚举。这里的区别因素是两个或多个常数是否可以在逻辑上组合在一起。
例如,这可能是一个好主意:
static const int
虽然不是这样:
class MyClass {
public:
enum {
Color_Red,
Color_Green,
Color_Blue,
};
};