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

标签 c++ class dynamic-arrays

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

相关文章:

c++ - Qt 通过 MongoDB C++ 初始化分解

c++ - 用于存储航类的 LinkedQueue 实现

在 C 中创建矩阵

objective-c - Objective C 在类初始化时分配原始 c 数组实例变量

c++ - 为什么在动态分配的数组上调用 delete 会导致一个崩溃而不是另一个?

c++ - 使用 DLL 覆盖/修改 C++ 类

c++ - OpenCV 3 似乎不适用于 Qt

c# - 将变量传递给类中的计时器事件

c++ - 包含头文件的顺序是什么?

java - 如何为类型类的数组编写 'get/set method'?