重载 [] 和 = 运算符以在 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++ 中已经有 vector
s 可用。如果您需要其他功能,我建议您扩展该课程并将您的功能添加到其中。从头开始定义一个类很容易导致诸如内存泄漏之类的问题,而这可以通过向量来避免。
设为 T& operator[] (std::size_t index) return array[index];
并添加重载:const T& 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++ 中接受我的模板类的值的主要内容,如果未能解决你的问题,请参考以下文章