首页 理论教育C++重载下标运算符

C++重载下标运算符

【摘要】:C++中下标运算符“[]”通常用于取数组的某个元素,下标运算符重载可以实现数组下标的越界检测等。重载下标运算符成员函数int&Assoc∷operator[]用于将单词及其次数添加到vec指向的区域中。

C++中下标运算符“[]”通常用于取数组的某个元素,下标运算符重载可以实现数组下标的越界检测等。注意:下标运算符重载函数只能作为类的成员函数,不能作为类的友元函数。

【例4.11】分析以下程序的执行结果。

解:上述程序通过数组下标运算符重载成员函数char operator[](int n)对数组下标进行越界判断,当越界时显示相应的错误信息,否则返回数组对应位置的元素。程序的执行结果如下:

This is C++Book

位置0:T

位置15:k

位置25:数组下标越界

【例4.12】设计一个Assoc类,其中用一个数组来表示每个单词的情况,而每个单词除了它出现的次数外,还应保存该单词本身,因此定义一个结构。该类中有一个重载运算符“[]”成员函数,用来返回某个单词已出现的次数,返回值是一个引用,可用于改变值。在每查找到一种单词后返回已出现的次数,在运算符后面加++运算,相对于返回值++,间接地起到每找到一个单词便将它的出现次数加1的目的。

解:程序如下:

图4.5 Assoc类描述

上述程序中,类Assoc类的描述如图4.5所示。其中,有3个数据成员,vec指向存放单词及次数的结构体动态数组,size指出分配总的单元个数即vec所指区域的大小,used指出该区域中已实际使用的单元个数。重载下标运算符成员函数int&Assoc∷operator[](char*p)用于将单词及其次数添加到vec指向的区域中。程序的一次执行如下:

输入10个单词

第1个单词:if↙

第2个单词:while↙(www.chuimin.cn)

第3个单词:for↙

第4个单词:while↙

第5个单词:if↙

第6个单词:switch↙

第7个单词:while↙

第8个单词:while↙

第9个单词:if↙

第10个单词:for↙

单词出现次数统计

if:3次

while:4次

for:2次

switch:1次