【问题标题】:Template class with [] operator overloading带有 [] 运算符重载的模板类
【发布时间】:2018-02-22 04:07:12
【问题描述】:

我是一个使用模板类

template <class T>
class Array
{
    enum {size = 10};
    T A[size];
public:
    T& operator [] (int index)
    {
        return A[index];
    }
};

一切正常。 我想知道如何从我的程序中调用 [] 运算符?

【问题讨论】:

  • 你创建了一个 Array 的实例并在上面使用 [] 运算符? Array&lt;int&gt; myArray; myArray[5] = 7;
  • 在谷歌上搜索

标签: c++ operator-overloading


【解决方案1】:

operator[] 可以像任何其他方法一样调用:myArray.operator[](3) = 5,或使用普通数组语法:myArray[3] = 5。这样调用时,括号中的值就是函数的参数。

【讨论】:

  • 但我的问题是函数调用在这里如何工作?
  • 当您编写myArray[3] 时,这将调用myArray 上的operator[] 方法,并将3 作为参数。不知道我该怎么解释。它只是一个可以用特殊语法调用的普通方法。
  • 如果我有一个函数“func(int n)”,它被称为 func(10)。但是这里我们在“[]”运算符中传递整数。那么这个函数的名称修改是如何工作的呢?
  • @Nagappa 您可以想象在编译期间括号被简单的函数语法替换,然后发生其他任何事情。我不认为这是实际发生的事情,但你明白了。 myArray[x] -> myArray.operator[](x).
猜你喜欢
  • 2020-02-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多