运算符重载作业分析详解(作业七) 小咪咪 2021-09-22 12:10 301阅读 0赞 1. 以下关于运算符重载说法正确的是\_\_\_\_\_\_\_\_。 A.所有运算符都可以重载 B. C++利用运算符重载可以创建新的运算符 C.根据需要,在重载时可以提高重载运算符的优先级 D. 不能改变重载运算符的优先级和结合性 分析:A选项,C++中分别有五个不能重载的运算符,分别为成员运算符(.)、成员指针访问运算符(\*)、域运算符(::)、长度运算符(sizeof)、条件运算符(?:)。 B选项,C++不允许用户自己定义新的运算符。 C选项,重载不能改变运算符的优先级别。 2. 下列说法中正确的说法是\_\_\_\_\_\_\_\_。 A.运算符重载不能作为非成员函数实现 B.运算符重载可以作为非成员函数实现 C.采用全局友元函数只能实现单目运算符重载 D. 运算符重载时只能是引用返回形式 分析:A选项,运算符重载可以作为非成员函数实现,如友元函数的运算符重载,即友元运算符重载函数; C选项,采用全局友元函数进行重载,除了单目运算符还可以是双目运算符。 D选项,运算符重载时不一定是引用返回形式。 3. 下列函数中,不能重载运算符的函数是\_\_\_\_\_\_\_\_。 A.成员函数 B.构造函数 C.普通函数 D.友元函数 分析:略。 4. 友元运算符obj1<obj2被C++编译器解释为\_\_\_\_\_\_\_\_。 A.operator<(obj1,obj2) B.<(obj1,obj2) C.obj2.operator<(obj1) D.obj1.operator<(obj2) 5. 不能用友元函数重载的是 A.= B.== C.<= D.++ 分析:赋值操作符是可以被重载的,但是每个赋值操作符都必须被定义为类的一个成员函数,而友元函数是类的非成员函数,因此不能被友元函数重载。 6. 要使用成员函数来重载运算符"+",实现a+b运算,则 A.a必须是对象,b可为整数或实数 B.a和b都必须为对象 C.b必须为对象,a可为整数或实数 D.a和b均可以为整数或实数 7. 下面关于类型转换的描述中,错误的是 A.构造函数可以把一种类类型对象转换成另一种类类型对象 B.构造函数可以把一种类类型对象转换成基本类型对象 C.类型转换函数可以把类类型对象转换为其他指定类型对象 D.类型转换函数只能定义为一个类的成员函数,不能定义为类的友元函数 9.利用成员函数对双目运算符进行重载,其左操作数为 此类的一个对象,右操作数位 任意类型 。 10.运算符重载仍然保持原来的优先级、 结合性 和 语法结构 。 11.为了满足运算符“+”的交换律,必须将其重载为 友元函数 。 12.将下列程序补充完整。 \#include <iostream.h> \#include <string.h> class String \{ char \*str; public: String(); String(char \*p); char &operator\[\](int index); bool operator>(const String s); friend ostream &operator<<(ostream &output,String s); \}; String::String() \{ str=NULL; \} String::String(char \*p) \{ int length= strlen(p) ; str=new char\[length+1\]; strcpy(str,p); \} char &String::operator\[\](int index) \{ return str\[index\]; \} bool String::operator>(const String s) \{ if( strcmp(this->str,s.str)>0 ) return true; else return false; \} ostream &operator<<(ostream &output,String s) \{ output<<s.str<<endl; return output; \} void main() \{ String s("hello"),t("malloa"); cout<<s; s\[2\]=' '; cout<<s; cout<<(s>t); \}
还没有评论,来说两句吧...