《C++给学生习题第7章练习题(共7页).docx》由会员分享,可在线阅读,更多相关《C++给学生习题第7章练习题(共7页).docx(7页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上第7章练习题同步练习7.1一、选择题1在下列运算符中,不能重载的是( )。(A)!(B)sizeof(C)new(D)delete2在下列关于运算符重载的描述中,( )是正确的。(A)可以改变参与运算的操作数个数(B)可以改变运算符原来的优先级(C)可以改变运算符原来的结合性(D)不能改变原运算符的语义3运算符函数是一种特殊的( )或友元函数。(A)构造函数(B)析构函数(C)成员函数(D)重载函数4设op表示要重载的运算符,那么重载运算符的函数名是( )。(A)operator op(B)op(C)函数标识符(D)函数标识符op5用于类运算的运算符通常都要重载。但有
2、两个运算符系统提供默认重载版本,它们是( )。(A)-和.(B)+和-(C)=和&(D)new和delete【解答】BDCAC同步练习7.2一、选择题1在下列函数中,不能重载运算符的函数是( )。(A)成员函数(B)构造函数(C)普通函数(D)友元函数2在下列运算符中,要求用成员函数重载的运算符是( )。(A)=(B)=(C)=(D)+3在下列运算符中,要求用友元函数重载的运算符是( )。(A)=(B)(C)(D)( )4如果希望运算符的操作数(尤其是第一个操作数)有隐式转换,则重载运算符时必须用( )。(A)构造函数(B)析构函数(C)成员函数(D)友元函数5当一元运算符的操作数,或者二元运
3、算符的左操作数是该类的一个对象时,重载运算符函数一般定义为( )。(A)构造函数(B)析构函数(C)成员函数(D)友元函数【解答】BACDC二、程序练习1阅读程序,写出运行结果。#include using namespace std;class T public : T() a = 0; b = 0; c = 0; T( int i, int j, int k ) a = i; b =j; c = k; void get( int &i, int &j, int &k ) i = a; j = b; k = c; T operator* ( T obj ); private: int a,
4、b, c;T T:operator* ( T obj ) T tempobj; tempobj.a = a * obj.a; tempobj.b = b * obj.b; tempobj.c = c * obj.c; return tempobj;int main() T obj1( 1,2,3 ), obj2( 5,5,5 ), obj3; int a, b, c; obj3 = obj1 * obj2; obj3.get( a, b, c ); cout( obj1*obj2 ): a = atb = btc = cn; (obj2*obj3).get( a, b, c ); cout(
5、obj2*obj3 ): a = atb = btc = cn;【解答】 2阅读程序,写出运行结果。#include using namespace std;class Vector public: Vector() Vector(int i,int j) x = i; y = j; friend Vector operator+ ( Vector v1, Vector v2 ) Vector tempVector; tempVector.x = v1.x + v2.x; tempVector.y = v1.y + v2.y; return tempVector; void display()
6、 cout ( x , y ) endl; private: int x, y;int main() Vector v1( 1, 2 ), v2( 3, 4 ), v3; cout v1 = ; v1.display(); cout v2 = ; v2.display(); v3 = v1 + v2; cout v3 = v1 + v2 = ; v3.display();【解答】 同步练习7.3一、选择题1设有类A的对象Aobject,若用成员函数重载前置自增表达式,那么+Aobject被编译器解释为( )。(A)Aobject.operator+()(B)operator+(Aobject)
7、(C)+(Aobject)(D)Aobject : operator+()2运算符+,=,+和中,只能用成员函数重载的运算符是( )。(A)+和=(B)和后置+(C)=和(D)前置+和3在C+中,如果在类中重载了函数调用运算符(),那么重载函数调用的一般形式为( )。(A)(表达式)对象(B)(表达式表)对象(C)对象(表达式)(D)对象(表达式表)4设有类A的对象Aobject,若用友元函数重载后置自减表达式,那么Aobject-被编译器解释为( )。(A)Aobject.operator- ()(B)operator- (Aobject,0)(C)- (Aobject,0)(D)- (Ao
8、bject,0)5如果表达式+j*k中的+和*都是重载的友元运算符,则采用运算符函数调用格式,该表达式还可以表示为( )。(A)operator*(j.operator+(),k)(B)operator*(operator+(j),k)(C)operator+(j).operator*(k)(D)operator*(operator+(j),)6如果类A要重载插入运算符,那么重载函数参数表的形式一般定义为( )。(A)(constA&)(B)(ostream&)(C)(constA&, ostream&)(D)(ostream&, constA&)【解答】ACDBBD同步练习7.4一、选择题1
9、类型转换函数只能定义为一个类的( )。(A)构造函数(B)析构函数(C)成员函数(D)友元函数2具有一个非默认参数的构造函数一般用于实现从( )的转换。(A)该类类型到参数类型(B)参数类型到该类类型(C)参数类型到基本类型(D)类类型到基本类型3假设ClassX是类类型标识符,Type为类型标识符,可以是基本类型或类类型,Type_Value为Type类型的表达式,那么,类型转换函数的形式为( )。(A)ClassX : operator Type(Type t) return Type_Value; (B)friendClassX : operator Type() return Type
10、_Value; (C)Type ClassX : operator Type() return Type_Value; (D)ClassX : operator Type() return Type_Value; 4在下列关于类型转换的描述中,错误的是( )。(A)任何形式的构造函数都可以实现数据类型转换。(B)带非默认参数的构造函数可以把基本类型数据转换成类类型对象。(C)类型转换函数可以把类类型对象转换为其他指定类型对象。(D)类型转换函数只能定义为一个类的成员函数,不能定义为类的友元函数。5C+中利用构造函数进行类类型转换时的构造函数形式为( )。(A)类名:类名(arg);(B)类名:
11、类名(arg,arg1=E1,agrn=En);(C)类名(arg);(D)类名(arg,arg1=E1,agrn=En);【解答】CBDAB二、程序练习1阅读下面程序,按注释位置指出语句的性质。#include#includeusing namespace std;/定义String类class String friend ostream &operator(istream & input,String &s);/(2)什么语句 public: String(const char *m=);/(3)什么语句 String();/(4)什么语句 operator int() const;/(5
12、)什么语句 operator char* ()const;/(6)什么语句 private: char *str; int size;/(7)什么定义String:String(const char *m) size=strlen(m); str=new charsize+1; strcpy_s(str,size+1,m);/(8)什么定义String:String() delete str; size=0;/(9)什么定义ostream &operator(ostream &output,String &s) output(istream &input,String &s) char tem
13、p1000; inputtemp; delete s.str; s.size=strlen(temp); s.str=new chars.size+1; strcpy_s(s.str,s.size+1,temp); return input;/(11)什么定义String:operator int()const return size; /(12)什么定义String:operator char* () const static char temp1000; strcpy_s(temp,); strcat_s(temp,str); strcat_s(temp,); return temp;in
14、t main() char s100; String s1,s2;/(13)调用什么函数 coutPlease input two strings:s1s2;/(14)调用什么函数 coutoutput is:endl; couts1 as String-s1endl;/(15)调用什么函数 coutsizeof(s1) -sizeof(s2)=(int)s1- (int)s2)endl;/(16)调用什么函数 couts1 as char * -(char*)s1endl;/(17)调用什么函数 couts2 as char * -(char*)s2endl;/(18)调用什么函数 strc
15、py(s,s2);/(19)调用什么函数 coutAfter strcpy(s,s2); s=sendl;/(20)调用什么函数 return 0;/(21)调用什么函数【解答】#include#includeusing namespace std;/定义String类class Stringfriend ostream &operator(ostream & output,String &s); /(1)运算符(istream & input,String &s); /(2)运算符重载函数声明public:String(const char *m=);/(3)构造函数声明String();/
16、(4)析构函数声明operator int() const;/(5)类型转换函数声明operator char* ()const;/(6)类型转换函数声明private:char *str;int size;/(7)定义构造函数String:String(const char *m)size=strlen(m);str=new charsize+1;strcpy_s(str,size+1,m);/(8)定义析构函数 String:String() delete str;size=0; /(9)定义运算符重载函数ostream &operator(ostream &output,String &
17、s)output重载函数istream &operator(istream &input,String &s)char temp1000;inputtemp;delete s.str;s.size=strlen(temp);s.str=new chars.size+1;strcpy_s(s.str,s.size+1,temp);return input;/(11)定义int类型转换函数String:operator int()constreturn size;/(12)定义char*类型转换函数String:operator char* () conststatic char temp1000
18、;strcpy_s(temp,);strcat_s(temp,str);strcat_s(temp,);return temp;int main()char s100;String s1,s2;/(13)调用构造函数coutPlease input two strings:s1s2;/(14)/调用operator函数coutoutput is:endl;couts1 as String-s1endl;/(15)调用operator函数coutsizeof(s1)-sizeof(s2)=(int)s1-(int)s2)endl;/(16)调用operator int类型转换函数couts1 a
19、s char * -(char*)s1endl;/(17)调用operator char*类型转换函数couts2 as char * -(char*)s2endl;/(18)调用operator char*类型转换函数strcpy(s,s2);/(19)对参数s2调用类型转换函数operator char*,然后调用库函数coutAfter strcpy(s,s2); s=s必须要用友员函数重载的运算符 程序略。2类类型对象之间、类类型和基本类型对象之间用什么函数进行类型转换?归纳进行类型转换的构造函数和类型转换函数的定义形式、调用形式和调用时机。【解答】构造函数可以把基本类型、类类型数据转换成类类型数据;类类型转换函数可以在类类型和基本数据类型之间做数据转换。定义形式调用形式调用时机构造函数ClassX:ClassX(arg,arg1=E1,.,argn=En);隐式调用建立对象、参数传递时类类型转换函数ClassX:operator Type();用类型符显式调用;自动类型转换时隐式调用需要做数据类型转换时专心-专注-专业
限制150内