程序的执行结果如下:v1=(6,8)v2=(3,6)v1+v2=v1-v2=(3,2)2.重载双目运算符为类的友元函数运算符也可以重载为类的友元函数,这样,它就可以自由地访问该类的任何数据成员。假设有一个类A,对于双目运算符op,如果重载运算符op使之能够实现表达式“obj1 op obj2”,其中obj1和obj2均为A类的对象。将例4.5的类Vector中重载运算符改为友元函数实现。......
2023-11-07
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次
有关C++程序设计基础教程的文章
程序的执行结果如下:v1=(6,8)v2=(3,6)v1+v2=v1-v2=(3,2)2.重载双目运算符为类的友元函数运算符也可以重载为类的友元函数,这样,它就可以自由地访问该类的任何数据成员。假设有一个类A,对于双目运算符op,如果重载运算符op使之能够实现表达式“obj1 op obj2”,其中obj1和obj2均为A类的对象。将例4.5的类Vector中重载运算符改为友元函数实现。......
2023-11-07
解:上述程序与例4.2程序的功能相同,只是在这里重载运算符有一个返回值,因此A++或++B的结果是一个整数值。程序的执行结果如下:n=7n=62.重载单目运算符“->”“->”运算符是成员访问运算符,这种一元运算符只能被重载为成员函数。......
2023-11-07
所谓运算符重载就是对已有的运算符赋予多重含义,使同一个运算符作用于不同类型的数据时导致不同的行为,即完成不同的运算功能。在C++语言中,可以将运算符看着函数,运算符重载是通过运算符重载函数来实现的。C++运算符重载需要遵循的相关规则如下:不是所有的运算符都能重载,可以重载的运算符见表4.1所示,不能重载的运算符见表4.2所示。表4.1C++中可以重载的运算符表4.2C++中不能重载的运算符......
2023-11-07
在正常情况下,系统会为每一个类自动生成一个默认的完成上述功能的赋值运算符,当然,这种赋值只限于由一个类类型说明的对象之间赋值。图4.3对象内存分配可以重载运算符“=”来解决这个问题。在赋值运算符连用时,如s3=s2=s1,应使用方式2实现“=”运算符重载。......
2023-11-07
前面已经学习过,在C++程序中建立和删除对象使用两个运算符new和delete。new与delete两个运算符用于动态管理内存,在大多数情况下,它们是非常有效的。这就要重载运算符new与delete,使其按照要求完成对内存的管理。而且,无论是否使用关键字static进行修饰,重载了的new和delete均为类的静态成员函数。在带有“参数表”时,应注意使用重载new的方式。程序执行结果如下:new1 operatordelete operatornew2 operatordelete operator......
2023-11-07
运算符重载函数的调用格式与普通成员函数的调用格式类似,以双目运算符重载成员函数为例,其调用格式如下:左运算对象双目运算符右运算对象例如:对于前面的Complex,设计如下主函数:其中,“s3=s1+s2;”和“s4=s1-s2;”两个语句就是调用运算符重载函数。该函数执行完毕,释放tmp对象。......
2023-11-07
当重载输出运算符“<<”用于输出时,相当于创建一个插入符函数。“函数体”中给出实现该插入符重载目的的代码。该语句等价于:cout<>”在C++中,“>>”运算符称为提取运算符,对它进行重载的函数称为提取符函数。......
2023-11-07
C++语言的重载机制包含两种类型:一种是函数重载,另一种是运算符重载。对于定义的重载某一函数名的多个函数,当调用这些函数时,必须明确调用的是哪一个函数,这个过程称为重载函数的绑定。每种实现对应着一个函数体,这些函数的名字相同,但是函数的参数类型不同,这就是函数重载的概念。abs()函数重载的概念如图1.10所示。图1.10abs()函数重载分析以下程序中重载函数的情况。......
2023-11-07
相关推荐