重载 [] 和 = 运算符以在 C++ 中接受我的模板类的值

Posted

技术标签:

【中文标题】重载 [] 和 = 运算符以在 C++ 中接受我的模板类的值【英文标题】:Overloading [] and = operators to accept values for my template class in C++ 【发布时间】:2020-12-12 04:09:02 【问题描述】:

我正在用 C++ 创建自己的 ArrayList STL 类,但现在遇到了问题。我想重载 [] 或 = 运算符(对不起,我不知道哪个会更好的实现),以便 = 运算符右侧的值被分配给 [ 访问的向量的元素] 运算符。

我重载了 [] 运算符以从数组中获取元素,但不知道如何处理它的赋值。

这是 ArrayList 类的实现:

template<class T> class ArrayList

   T* array;
   ArrayList() 
   
   // Implemetation of [] overloading
   T& operator[] (int index) return array[index];

【问题讨论】:

您的程序将在正确初始化array 后运行。你有什么问题? 我不明白为什么要创建 ArrayList 类,而 C++ 中已经有 vectors 可用。如果您需要其他功能,我建议您扩展该课程并将您的功能添加到其中。从头开始定义一个类很容易导致诸如内存泄漏之类的问题,而这可以通过向量来避免。 设为 T&amp; operator[] (std::size_t index) return array[index]; 并添加重载:const T&amp; operator[] const (std::size_t index) return array[index];,然后你就到家了。 @DebarghaRoy - 这些通常是人们通过自己实现结构来学习语言和/或一般数据结构概念的情况。这是一项有价值的练习,我们中的许多人都经历过。一旦人们完成了这个学习过程,我完全同意你的看法。 【参考方案1】:

你越来越糊涂了。您正在询问分配 T 对象,但 T 不是您的 ArrayList 类。由T 类来处理它自己的任务,而不是由你的ArrayList 类来处理。

您已经编写的代码可以正常工作。

ArrayList<int> x = ...;
x[1] = 2;

ArrayList<std::string> y = ...;
y[0] = "hello";

尽管您应该更改 Ted 在 cmets 中提到的 const

【讨论】:

以上是关于重载 [] 和 = 运算符以在 C++ 中接受我的模板类的值的主要内容,如果未能解决你的问题,请参考以下文章

c++ 拷贝构造函数与赋值运算符重载函数的区别是

如何重载 new 运算符以在堆栈上分配? [关闭]

运算符 + 重载 C++

C++,如何在派生类中调用基类的重载提取运算符?

使用 n 维 C++ Vector 类实现算术运算符重载的更好方法?

C++中赋值运算操作符和=重载有啥区别?