我试图在我的成员函数中创建一个动态数组,但是,每次我调用该函数时,它似乎都创建了一个新的动态数组。无论如何要在成员函数内创建一个动态数组,这样它就不会 self 改造。
class predator
{
private:
string name;
string species;
protected:
string *list;
public:
predator(string theSpecies);
void killsRecorded(string kills); // add a new kill to the end of the predator's list of kills
string *killsList(); // return a pointer to the array of all kills by this predator
int noOfTotalKills(); // how many kills have been recorded
int k;
static int n;
};
//The header file
void predator::killsRecorded(string kills)
{
k = 0;
list = new string[5];
*(list + k) = kills;
k = n++;
cout<< k<< endl;
}
string* predator::killsList()
{
//cout<< (sizeof(list)/sizeof(list[0]))<< endl;
for(int i=0; i<5; i++)
{
cout<< *(list + i)<< endl;
}
}
上面是我的类和头文件,void killsRecorded(string kills) 应该将 kills 添加到我的数组中,但是,当我在我的 main 中尝试这样做时。
predator *prey;
prey = new predator("Cheetah");
prey->killsRecorded("Mouse");
prey->KillsRecorded("Donkey");
prey->killsList();
打印出来
Created a hunter that is a Cheetah
0
1
Donkey
*BLANK LINE
*BLANK LINE
*BLANK LINE
*BLANK LINE
相反,Mouse 应该在第一行,Donkey 在第二行。难道我做错了什么?另外,我不能使用 vector ,它用于作业。
最佳答案
在您的构造函数中,为 n 分配一个默认值,例如 5。然后创建一个该大小的数组。
predator::predator()
: n(5),
k(0)
{
kills = new string[n];
}
然后 recordKills 检查 kills 中是否有空间,必要时重新分配:
recordKills(string kill)
{
if(k >= n) {
string* oldKills = kills;
kills = new string[2*n];
// copy
for(int i = 0; i< n: i++) {
kills[i] = oldKills[i];
}
n *= 2;
delete [] oldKills;
}
kills[k++] = kill;
}
通过数据结构的名称调用变量通常不是一个好主意,因此我将“list”重命名为“kills”。
然后在打印杀戮时,循环直到 k:
string* listKills()
{
for(int i = 0; i < k; i++) {
cout << kills[i] << endl;
}
return kills;
}
记得在析构函数中删除 kills!
关于c++ - 在类成员函数中创建一个动态数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37476352/