gpt4 book ai didi

c++ - 运算符在模板化动态数组中重载 []

转载 作者:行者123 更新时间:2023-11-30 04:46:38 26 4
gpt4 key购买 nike

我试图在模板化动态数组中重载 [] 运算符,但它似乎没有做任何事情?

我为学校创建了一个模板化动态数组,我尝试将重载分离到类之外。

DynArray.h

template <typename T>
class DynArray
{
public:
//The constructor initialises the size of 10 and m_Data to nullptr
DynArray(void)
{
m_AllocatedSize = 10;
m_Data = nullptr;
}

//deletes m_Data
~DynArray()
{
delete[] m_Data;
m_Data = nullptr;
}

T* operator [] (int index)
{
return m_Data[index];
}

//creates the array and sets all values to 0
T* CreateArray(void)
{
m_Data = new T[m_AllocatedSize];
m_UsedElements = 0;

for (int i = 0; i < m_AllocatedSize; ++i)
{
m_Data[i] = NULL;
}

return m_Data;
}

private:

bool Compare(T a, T b)
{
if (a > b)
return true;
return false;
}


T* m_Data;
T* m_newData;
int m_AllocatedSize;
int m_UsedElements;
};

main.cpp

#include <iostream>
#include "DynArray.h"
int main()
{
DynArray<int>* myArray = new DynArray<int>;
//runs the create function
myArray->CreateArray();

int test = myArray[2];

delete myArray;
return 0;
}

在这种情况下,我希望重载返回 m_Data[2] 处的 int,但它似乎根本没有重载 [] 而是说 no suitable conversion from DynArray<int> to int .

最佳答案

您返回的指针不是您想要的。你应该这样做:

T& operator [] (const int& index)
{
return m_Data[index];
}

此外,myArray 是一个指针,您必须在使用前取消引用它。

int test = (*myArray)[2];

最好不要使用指针:

    int main()// suggested by @user4581301
{
DynArray<int> myArray;
//runs the create function
myArray.CreateArray();

int test = myArray[2];


return 0;
}

没有理由在这里使用指针。

与其使用newdelete 进行动态分配,不如使用smart pointer。这里还有一个问题,你没有检查范围,如果索引是负数怎么办。

关于c++ - 运算符在模板化动态数组中重载 [],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56642699/

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