我有一个包含数组的类.我想要将此数组设置为常量的长度:
// Entities.h
class Entities
{
private:
const int maxLimit;
int objects[maxLimit];
int currentUsage;
public:
Entities();
bool addObject(int identifier);
void showStructure();
};
Run Code Online (Sandbox Code Playgroud)
我遇到的主要问题是构造函数.我想:
// Entities.cpp
Entities::Entities() : maxLimit(50)
{
currentUsage = 0;
cout << "Entities constructed with max of 50" << endl;
}
Run Code Online (Sandbox Code Playgroud)
本来就足够了......但事实并非如此.我不知道是否可以使用初始化列表进行数组初始化.
如何objects
使用maxLimit
const 初始化数组?我对C++中的类比较新,但我有Java经验.我主要测试这种'常数'现象.
Joh*_*itb 32
数组必须具有恒定长度.我的意思是该类的所有对象的长度相同.这是因为编译器必须知道每个对象的大小,并且对于该特定类的所有对象它必须是相同的.所以,以下会这样做:
class Entities
{
private:
static const int maxLimit = 50;
int objects[maxLimit];
int currentUsage;
public:
Entities();
bool addObject(int identifier);
void showStructure();
};
Run Code Online (Sandbox Code Playgroud)
在cpp文件中:
const int Entities::maxLimit;
Run Code Online (Sandbox Code Playgroud)
我更喜欢使用枚举,因为我不必在cpp文件中定义静态,然后:
class Entities
{
private:
enum { maxLimit = 50 };
int objects[maxLimit];
int currentUsage;
public:
Entities();
bool addObject(int identifier);
void showStructure();
};
Run Code Online (Sandbox Code Playgroud)
如果要拥有数组的每个对象大小,则可以使用动态数组.vector
就是这样一个:
class Entities
{
private:
const int maxLimit;
std::vector<int> objects;
int currentUsage;
public:
Entities();
bool addObject(int identifier);
void showStructure();
};
// Entities.cpp
Entities::Entities(int limit)
: maxLimit(limit), objects(limit), currentUsage(0)
{
cout << "Entities constructed with max of 50" << endl;
}
Run Code Online (Sandbox Code Playgroud)
最好是在初始化列表中尽可能多地进行初始化.
Evg*_*zin 10
如果需要在编译时设置数组大小,可以使用template参数:
template<size_t maxLimit>
class Entities
{
int objects[maxLimit];
public:
Entities() {}
...
};
Entities<1000> inst;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
35611 次 |
最近记录: |