重载[] int& operator[ ]( )

https://blog.csdn.net/qq_29344757/article/details/76855218

格式:

返回类型& operator[] (输入参数列表);

注意返回的是引用;

重载操作符的原则是不能改变操作符的原有语义和操作数的个数;

”[]”用于取元素的值,且只有一个操作数,为括号内的值,这个是不可被改变的,但是括号内的值是针对该数组而操作的,所以”[]”操作符肯定有一个数组对象,这也就决定了对”[]”的重载实现的函数只能是类的成员函数,因为类的成员函数具有this指针,它可以指向对象本身(对象可以内含一个数组嘛):类必须得有一个数组成员?

因为返回的是引用,所以必然对象内部已经有存在的数组列表,链表也行,可以引用就行!

class cls
{
private:
    int ar[6];
public:
    cls();
    int& operator[] (int i);    //重载"[]"操作符
};
cls::cls()
{
    int i;
    for (i = 0; i < 6; i++)
    {
        ar[i] = i + 1;
    }
}
int& cls::operator[] (int i)    //返回引用,这样才可以对返回值赋值
{
    return ar[i];
}

int main(void)
{
    cls c;
    printf("c[1] = %d\n", c[1]);
    c[4] = 16;
    printf("c[4] = %d\n", c[4]);
    return 0;
}

”[]”内的操作数支持字符串类型;

class cls
{
    private: int ar[6];
public:
    int& operator[] (int i);            //重载"[]"操作符,"[]"内的操作数的操作数是int类型
    int& operator[] (const char* str);  //重载"[]"操作符,"[]"内的操作数是字符串类型
};
int& cls::operator[] (const char* str)
{
    //1st 2nd 3rd 4th 5th
    if (!strcmp("1st", str))
        return ar[0];

    if (!strcmp("2nd", str))
        return ar[1];
}
int main(void)
{
    cls c;
    printf("c[\"5th\"] = %d\n", c["1th"]);
    c["2nd"] = 66;
    printf("c[\"2nd\"] = %d\n", c["2nd"]);
    return 0;
}

原文地址:https://www.cnblogs.com/wllwqdeai/p/10128149.html

时间: 2024-11-02 19:42:18

重载[] int& operator[ ]( )的相关文章

ostream类重载的operator&lt;&lt;()函数

ostream类重载了operator<<()以识别不同的类型,如: int short  long unsigned int unsigned short unsigned long float double     long double  char  signed char unsigned char 这样cout就不用像C语言中的printf那样需要程序员自行匹配数据类型,如:printf("%s%d%f","hello world",32,3.

重载操作符 &#39;operator&#39;

operator 是 C++ 的(运算符的)重载操作符.用作扩展运算符的功能. 它和运算符一起使用,表示一个运算符函数,理解时应将  [operator+运算符] 整体上视为一个函数名. 要注意的是:一方面要使运算符的使用方法与其原来一致,另一方面扩展其功能只能通过函数的方式(c++中,"功能"都是由函数实现的). 使用时: [返回类型] [operator+运算符] (const ElemType&a)const  {...} 为什么需要重载操作符? 系统的所有操作符,一般情

运算符重载关键字operator

operator关键字用来重载内置运算符,使用方法如下: public class OperatorController : Controller { // // GET: /Operator/ public int num, den; public OperatorController(int num, int den) { this.num = num; this.den = den; } // overload operator + public static OperatorContro

C++重载操作符operator

operator是C++关键字,用于对C++进行扩展: 1.可以被重载的操作符:new,new[],delete,delete[],+,-,*,/,%,^,&,|,~,!,=,<,>,+=,<<,>>,<<=,>>=,++,!=,<=,>=,&&,||,++,--,->*,->,(),[] 不可以被重载的操作符:.  .* :: ?: 2.基类对赋值操作符(=)重载不能被派生类继承. “+”操作符重

陷阱重重的C++赋值重载函数operator=

曾经有C++高手说过:看一个C++程序员功底是否够硬,让他写个赋值重载函数就能看出来了!在我看来,这种说法并不夸张.因为能将operator=函数写好确实需要扎实的基础,其中的陷阱真不少. 陷阱一:不懂规避自我拷贝 先看代码 string& string::operator=(const string& rhs) { if (m_pStr != NULL) delete [] m_pStr; m_pStr = new char[....]; strcpy(....); return *th

C++ 运算符重载(operator overloading)

运算符重载是通过函数实现的,它本质上是函数重载. 运算符重载其实就是定义一个函数,在函数内实现想要的功能,当用到这个运算符时,编译器会自动调用这个函数. 可以将operator运算符名称这一部分看作函数名,例如operator+. 原文地址:https://www.cnblogs.com/xiaobaizzz/p/12355294.html

C++ 运算符重载四(自定义数组类)

//自定义数组类 #include<iostream> using namespace std; //分析:能获取数组长度,添加元素,删除元素,修改元素 //要求重载[],=,==,!=运算符 class MyArray { private: int mLength; int* mSpace; public: MyArray(int length){ cout << "有参构造函数被调用了1" << endl; mLength = length; m

二元运算符重载

------------------siwuxie095 二元运算符重载 所谓 二元运算符,即 这个符号与两个操作数进行运算 (1)加号 + 的重载 加号 + 的重载方式有两种:一种是友元函数重载,一种是成员函数重载 1)先来看成员函数重载,如下: 定义一个坐标类:Coordinate 在类中声明成员函数 operator+(),它的参数是 const Coordinate &coor 在实现时: 首先需要定义一个临时对象 temp,传入对象 coor 的 m_iX 要和 当前对象的 m_iX

北大程序设计与算法三 (c++程序设计)运算符重载

1: 全局函数作为友元放入某个类时,可以直接在类中定义完整的函数. friend ostream & operator<<(ostream &os,int a) { os<<a; return os; } 2:可以重载() int & operator()(int i,int j) { return p[j+i*line]; } 3:重载二维数组 [][] int p[row*line];//通过如下方式重载后,对于a[i]返回的就是一个指向第i列的int