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人(“兔子兔”);
}
进一步阅读
唯一的理由是在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我这一部分最好的打字错误,等一下,我通常