C++ 类内常量?

C++ 类内常量?,c++,C++,嗨,我试着在一个类中定义一个常量,用正常的或常规的方法来定义它似乎不起作用 class cat { public: cat(); ~cat(); private: static const int MAX_VALUE = -99999; int Number; public: void OrganizeNumbers(); void SetNumbers(); }; 所以我在做了一些研究后发现的解决方案是将它声明为静态,但这意味着

嗨,我试着在一个类中定义一个常量,用正常的或常规的方法来定义它似乎不起作用

class cat
{
public:

    cat();
    ~cat();


private:

    static const int MAX_VALUE = -99999;
    int Number;


public:

    void OrganizeNumbers();
    void SetNumbers();

};

所以我在做了一些研究后发现的解决方案是将它声明为
静态
,但这意味着什么?我想问的是,声明一个常数确实是必要的,因为你可以看到它是私有的,对吗?我的意思是,它只能由类方法访问,所以为什么要设置一个常量,而且我还了解到,使用
static
只允许使用integral类型,所以它实际上是一个dissavantage。。。如果您正在考虑制作游戏。

静态
意味着该成员将在对象的所有实例中共享

如果您希望能够在不同的实例中拥有不同的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");
}
#包括
结构人{
人员(标准::字符串常量(&n)
:姓名(n)
{
//在此处执行:“name=n”无效
}
std::字符串常量名称;
};
int main(int argc,char*argv[]){
a人(“圣诞老人”);
b人(“兔子兔”);
}
进一步阅读


静态
意味着成员将在对象的所有实例中共享

如果您希望能够在不同的实例中拥有不同的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");
}
#包括
结构人{
人员(标准::字符串常量(&n)
:姓名(n)
{
//在此处执行:“name=n”无效
}
std::字符串常量名称;
};
int main(int argc,char*argv[]){
a人(“圣诞老人”);
b人(“兔子兔”);
}
进一步阅读

1)如果您只打算在类的实现中使用MAX_值,则将其声明为“private”,如果它是类接口的一部分,则将其声明为“public”

2) 在“C”时代,“static”被用来对外部模块“隐藏”变量

<>在C++下不再需要这样做了。< /P>

唯一的理由是在C++中使用“static”是使成员类宽(而不是每个对象实例)。这里的情况并非如此——您不需要“静态”

3) “const”对您来说应该足够了

< P> 4)一种(老式)替代方法是定义C++枚举(而不是“const int”)

< p > 1)声明它“私有”,如果您只在类的实现中使用Max值,如果它是类接口的一部分,则在“公共”声明它。 2) 在“C”时代,“static”被用来对外部模块“隐藏”变量

<>在C++下不再需要这样做了。< /P>

唯一的理由是在C++中使用“static”是使成员类宽(而不是每个对象实例)。这里的情况并非如此——您不需要“静态”

3) “const”对您来说应该足够了


< P> 4)一个(旧的)替代方法是定义一个C++枚举(而不是一个“const int”)

这里似乎有一些混淆的想法:

  • 静态
    成员不必是整数类型,您提到的缺点并不存在
  • const
    private
    是不相关的,仅仅因为一个成员只能从给定类的实例访问,并不意味着什么都不会改变它

  • const-correct可以防止由于值意外更改而导致的运行时错误。

    这里似乎有一些混乱的想法:

  • 静态
    成员不必是整数类型,您提到的缺点并不存在
  • const
    private
    是不相关的,仅仅因为一个成员只能从给定类的实例访问,并不意味着什么都不会改变它

  • const-correct可防止因值意外更改而导致的运行时错误。

    您必须使用以下命令初始化构造函数中的
    const
    属性:

    cat() : MAX_VALUE(-99999) {}
    

    (声明为
    const int MAX_VALUE;

    您必须在构造函数中使用以下参数初始化
    const
    属性:

    cat() : MAX_VALUE(-99999) {}
    

    (声明为
    const int MAX_VALUE;

    如果我只通过键入const来执行,我会得到一些错误,比如未初始化的const等等。。。。如果我在cat::cat()上初始化它,我会得到只读错误?@LeandroTheBest查看我的帖子,了解如何初始化你的常量值。你必须用:
    cat():MAX_VALUE(-99999){}
    初始化它,如果我只通过键入const,我会得到未初始化的常量等错误。。。。如果我在cat::cat()上初始化它,我会得到只读错误?@LeandroTheBest查看我的帖子,了解如何初始化常量值。你必须用:
    cat():MAX_VALUE(-99999){}初始化它
    你试图解决的问题是什么,让你得出结论,你需要这个成员是
    静态的
    ?好吧,类名与它的功能无关,它只是一个有趣的名字,我试图实现的过程是组织数字,所以我需要一个开始过程的限制
    如果(数字[I]
    然后我们开始处理
    if(Number[i]
    …您试图解决什么问题,从而得出结论,您需要将此成员设置为
    静态
    ?好吧,类名与它的功能没有任何关系,只是一个有趣的名称,我试图实现的过程是组织数字,所以我需要一个开始过程的限制
    if(Number[I]
    ,然后我们从过程
    if(Number[I]
    …我不太明白你的例子,我把它写在我的cpp文件上了,有错误吗?链接谢谢。@leandro我这一部分最好的打字错误,等一下,我通常