嗨我试图在一个类中定义一个常量,按照正常或通常的方式进行操作似乎无法正常工作
class cat
{
public:
cat();
~cat();
private:
static const int MAX_VALUE = -99999;
int Number;
public:
void OrganizeNumbers();
void SetNumbers();
};
所以我在做一些研究之后找到的解决方案就是将其声明为static
但是这意味着什么呢?我想要问一下,声明一个常数是非常必要的,因为你可以看到它是私有的对?我的意思是它只能通过类方法访问,所以为什么要设置一个常量,而且我读到使用static
只允许你使用整数类型,所以它实际上是一种不满...如果你想创建一个游戏。
答案 0 :(得分:3)
static
表示该成员将在您对象的所有实例中共享。
如果您希望能够在不同的实例中使用const成员的不同值,则需要使用初始化列表在构造函数中设置它的值。
请参阅以下示例:
#include <string>
struct Person {
Person (std::string const& n)
: name (n)
{
// doing: 'name = n' here is invalid
}
std::string const name;
};
int main (int argc, char *argv[]) {
Person a ("Santa Claus");
Person b ("Bunny the Rabbit");
}
进一步阅读
答案 1 :(得分:2)
1)如果你只是在你的类的实现中使用MAX_VALUE,则声明它是“私有的”,如果它是你的类接口的一部分,则在“public”下声明它。
2)回到“C”天,“静态”被用来“隐藏”来自外部模块的变量。
在C ++下不再需要这样做了。
在C ++中使用“static”的唯一原因是使成员在类范围内(而不是每个对象的实例)。这不是这种情况 - 你不需要“静态”。
3)“const”应该足够了。
4)(老式)替代方案是定义C ++枚举(而不是“const int”)
答案 2 :(得分:1)
这里似乎有一些混乱的想法:
static
成员不一定是整数类型,你提到的缺点不存在。const
和private
是无关的,只是因为只能从给定类的实例访问成员,并不意味着什么都不会改变它。执行const-correct可防止因意外更改值而导致的运行时错误。
答案 3 :(得分:0)
您必须在构造函数中使用以下命令初始化const
属性:
cat() : MAX_VALUE(-99999) {}
(声明为const int MAX_VALUE;
)