两个相同的重载运算符[]一个返回引用

Two same overloaded operator [] one returning reference

本文关键字:返回 引用 一个 两个 重载 运算符      更新时间:2023-10-16

在同一个类中可以有两个像这样的重载operator[]吗?

我很困惑当我使用operator[]时使用了哪个定义,int不是模棱两可吗?他们不是有相同的签名吗?

template <class T, int n> 
class ArrayTP 
{ 
private: 
T ar[n]; 
public: 
ArrayTP() {};
virtual T & operator[](int i); 
virtual T operator[](int i) const;
};

此类包含这些重载运算符的声明。不过,我的问题并没有包括定义。

重载运算符的工作原理与普通重载函数没有什么不同。只是它们是特殊的功能。所以我给你们举一个函数的一般例子,这个例子适用于任何类型的函数。

您必须知道,顶级const对可以传递给函数的对象。具有顶级常量的参数是与没有顶级常量的无法区分:

Record lookup(Phone);
Record lookup(const Phone); // redeclares Record lookup(Phone)
Record lookup(Phone*);
Record lookup(Phone* const); // redeclares Record lookup(Phone*)

在这些声明中,第二个声明声明的函数与第一个声明的函数相同。另一方面,我们可以根据参数是否为引用来重载(或指针(指向给定类型的常量或非常量版本;这样的常量是低级别。

// functions taking const and nonconst references or pointers have different parameters 
// declarations for four independent, overloaded functions
Record lookup(Account&); // function that takes a reference to Account
Record lookup(const Account&); // new function that takes a constbreference.
Record lookup(Account*); // new function, takes a pointer to Account
Record lookup(const Account*); // new function, takes a pointer to const

在这些情况下,编译器可以使用参数的常量来区分调用哪个函数因为没有从const转换,我们只能将const对象(或指向const的指针(传递给具有const参数。因为存在到const的转换,所以我们可以调用函数或指向非约束的指针。但是,当我们传递nonconst对象或指向nonconst的指针。底漆示例。