C++ 如何通过方括号重载访问自己数组类的元素?

C++ 如何通过方括号重载访问自己数组类的元素?,c++,operator-overloading,C++,Operator Overloading,看看我正在编写的代码的这个简化版本,你就会理解这个问题 #include <iostream> template<typename T, int N = 2> class Array { T m_arr[N]{ 0 }; int m_size = N; public: T& operator[](const int& index) { return m_arr[index]; } }; int main() { Arra

看看我正在编写的代码的这个简化版本,你就会理解这个问题

#include <iostream>

template<typename T, int N = 2>
class Array
{
    T m_arr[N]{ 0 };
    int m_size = N;
public:
    T& operator[](const int& index) { return m_arr[index]; }
};

int main()
{
    Array<int, 10>* thing = new Array<int, 10>();
    thing[2] = 5;
    std::cout << thing[2] << std::endl;
}
#包括
模板
类数组
{
T m_arr[N]{0};
int m_size=N;
公众:
T&运算符[](const int&index){return m_arr[index];}
};
int main()
{
Array*thing=新数组();
事物[2]=5;

std::cout对于编写的代码,
thing
是指向
数组的指针,因此使用
(*thing)[2]
访问
数组本身的元素。更一般地说,不要在
main()
中使用指针。使用
数组thing;thing[2]=5;std::cout@Peter我从来没有用Java编程过,但是无论如何,如果我需要在堆上创建那个数组呢?我不需要使用指针吗?@Peter因为我正在尝试创建自己的数组和向量类(尽管它们可能效率很低,但只是为了好玩),而您不需要编写
(*东西)[2]
当您尝试访问标准vector类中的元素时,他们是如何做到的?@Karlos这是因为您持有一个向量而不是指向向量的指针,否则您需要*@Karlos-您可以创建一个指向名为
thing
的数组的指针,这意味着可以动态分配对象,该对象名为
(*thing)
,使用
(*thing)[2]
访问它的第三个元素,或者创建一个名为
thing
的对象,并作为
thing[2]访问它的第三个元素你试图用一个指针来动态分配对象,但是如果它是一个实际对象,你就不能用这种方法来混合。我对另一种语言的评论的原因是你的代码使用了其他语言中常用的技术,而不是C++语言。
thing = whatever;
std::cout << thing << std::endl;
thing[num] = whatever;
std::cout << thing[num] << std::endl;