gpt4 book ai didi

c++ - 在类成员函数中创建一个动态数组

转载 作者:行者123 更新时间:2023-11-28 05:39:26 25 4
gpt4 key购买 nike

我试图在我的成员函数中创建一个动态数组,但是,每次我调用该函数时,它似乎都创建了一个新的动态数组。无论如何要在成员函数内创建一个动态数组,这样它就不会 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com