课内有什么特点?

时间:2011-12-24 01:31:42

标签: c++

嗨我试图在一个类中定义一个常量,按照正常或通常的方式进行操作似乎无法正常工作

class cat
{
public:

    cat();
    ~cat();


private:

    static const int MAX_VALUE = -99999;
    int Number;


public:

    void OrganizeNumbers();
    void SetNumbers();

};

所以我在做一些研究之后找到的解决方案就是将其声明为static但是这意味着什么呢?我想要问一下,声明一个常数是非常必要的,因为你可以看到它是私有的对?我的意思是它只能通过类方法访问,所以为什么要设置一个常量,而且我读到使用static只允许你使用整数类型,所以它实际上是一种不满...如果你想创建一个游戏。

4 个答案:

答案 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)

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

  1. static成员不一定是整数类型,你提到的缺点不存在。
  2. constprivate是无关的,只是因为只能从给定类的实例访问成员,并不意味着什么都不会改变它。
  3. 执行const-correct可防止因意外更改值而导致的运行时错误。

答案 3 :(得分:0)

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

cat() : MAX_VALUE(-99999) {}

(声明为const int MAX_VALUE;