C++给学生习题第7章练习题

2019-09-01 19:23

第7章练习题

同步练习7.1

一、选择题

1.在下列运算符中,不能重载的是()。 (A)!

(B)sizeof

(C)new

(D)delete

2.在下列关于运算符重载的描述中,()是正确的。 (A)可以改变参与运算的操作数个数 (C)可以改变运算符原来的结合性 (A)构造函数 (A)operatorop (A)->和. 【解答】

B

D

3.运算符函数是一种特殊的()或友元函数。

(B)析构函数 (B)op

(C)成员函数 (C)函数标识符 (C)=和&

(D)重载函数 (D)函数标识符op (D)new和delete

4.设op表示要重载的运算符,那么重载运算符的函数名是()。

5.用于类运算的运算符通常都要重载。但有两个运算符系统提供默认重载版本,它们是()。

(B)++和-- C

A

C

(B)可以改变运算符原来的优先级 (D)不能改变原运算符的语义

同步练习7.2

一、选择题

1.在下列函数中,不能重载运算符的函数是()。 (A)成员函数 (A)= (A)=

(B)构造函数 (B)== (B)[]

(C)普通函数 (C)<= (C)<<

(D)友元函数 (D)++ (D)() (D)友元函数

2.在下列运算符中,要求用成员函数重载的运算符是()。 3.在下列运算符中,要求用友元函数重载的运算符是()。

4.如果希望运算符的操作数(尤其是第一个操作数)有隐式转换,则重载运算符时必须用()。 (A)构造函数

定义为()。

(A)构造函数 【解答】

二、程序练习

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 );

B

A

(B)析构函数 C

D

C

(C)成员函数

(D)友元函数

(B)析构函数

(C)成员函数

5.当一元运算符的操作数,或者二元运算符的左操作数是该类的一个对象时,重载运算符函数一般

private: int a, 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<<\(obj2*obj3).get( a, b, c );

cout<<\} 【解答】

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()

{ cout << \private: int x, y; };

int main()

{ Vector v1( 1, 2 ), v2( 3, 4 ), v3; cout << \v1.display(); cout << \v2.display(); v3 = v1 + v2;

cout << \

v3.display(); } 【解答】

同步练习7.3

一、选择题

1.设有类A的对象Aobject,若用成员函数重载前置自增表达式,那么++Aobject被编译器解释为()。 (A)Aobject.operator++() (C)++(Aobject) (A)+和= (C)=和[]

(B)operator++(Aobject) (D)Aobject :: operator++() (B)[]和后置++ (D)前置++和[] (B)(表达式表)对象 (D)对象(表达式表)

2.运算符++,=,+和[]中,只能用成员函数重载的运算符是()。

3.在C++中,如果在类中重载了函数调用运算符(),那么重载函数调用的一般形式为()。 (A)(表达式)对象 (C)对象(表达式)

()。

(A)Aobject.operator-- () (C)-- (Aobject,0)

以表示为()。

(A)operator*(j.operator++(),k) (C)operator++(j).operator*(k) (A)(constA&)

(B)operator*(operator++(j),k) (D)operator*(operator++(j),) (B)(ostream&)

(D)(ostream&, constA&)

(B)operator-- (Aobject,0) (D)-- (Aobject,0)

4.设有类A的对象Aobject,若用友元函数重载后置自减表达式,那么Aobject--被编译器解释为

5.如果表达式++j*k中的++和*都是重载的友元运算符,则采用运算符函数调用格式,该表达式还可

6.如果类A要重载插入运算符<<,那么重载函数参数表的形式一般定义为()。 (C)(constA&, ostream&)

【解答】

A C D B B D

同步练习7.4

一、选择题

1.类型转换函数只能定义为一个类的()。 (A)构造函数

(B)析构函数

(C)成员函数

(D)友元函数

2.具有一个非默认参数的构造函数一般用于实现从()的转换。 (A)该类类型到参数类型 (C)参数类型到基本类型

(B)参数类型到该类类型 (D)类类型到基本类型

3.假设ClassX是类类型标识符,Type为类型标识符,可以是基本类型或类类型,Type_Value为Type

类型的表达式,那么,类型转换函数的形式为()。

(A)ClassX :: operator Type(Type t){… return Type_Value;} (B)friendClassX :: operator Type(){… return Type_Value;} (C)Type ClassX :: operator Type(){…return Type_Value;} (D)ClassX :: operator Type(){… return Type_Value;} 4.在下列关于类型转换的描述中,错误的是()。 (A)任何形式的构造函数都可以实现数据类型转换。

(B)带非默认参数的构造函数可以把基本类型数据转换成类类型对象。 (C)类型转换函数可以把类类型对象转换为其他指定类型对象。

(D)类型转换函数只能定义为一个类的成员函数,不能定义为类的友元函数。 5.C++中利用构造函数进行类类型转换时的构造函数形式为()。 (A)类名::类名(arg); (C)~类名(arg);

(B)类名::类名(arg,arg1=E1,…,agrn=En); (D)~类名(arg,arg1=E1,…,agrn=En);

【解答】 C

二、程序练习

B D A B

1.阅读下面程序,按注释位置指出语句的性质。

#include #include using namespace std; //定义String类 class String

{friend ostream &operator<<(ostream & output,String &s); //(1)什么语句 friend istream &operator>>(istream & input,String &s); //(2)什么语句 public:

String(const char *m=\ //(3)什么语句 ~String(); //(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 char[size+1]; strcpy_s(str,size+1,m); }

//(8)什么定义 String::~String() { delete [] str; size=0; }

//(9)什么定义

ostream &operator<<(ostream &output,String &s) {output<

//(10)什么定义

istream &operator>>(istream &input,String &s) {char temp[1000]; input>>temp; delete [] s.str;

s.size=strlen(temp);

s.str=new char[s.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 temp[1000]; strcpy_s(temp,\ strcat_s(temp,str); strcat_s(temp,\ return temp; }

int main() {char s[100]; String s1,s2; //(13)调用什么函数 cout<<\ cin>>s1>>s2; //(14)调用什么函数 cout<<\

cout<<\--\ //(15)调用什么函数 cout<<\-sizeof(s2)=\- (int)s2)<

#include #include using namespace std; //定义String类 class String { friend ostream&operator<<(ostream&output,String&s); //(1)运算符<<重载函数声明 friend istream&operator>>(istream&input,String&s); //(2)运算符>>重载函数声明 public: String(const char *m=\//(3)构造函数声明 ~String(); //(4)析构函数声明 operator int() const; //(5)类型转换函数声明 operator char* ()const; //(6)类型转换函数声明 private: char *str; int size; };

//(7)定义构造函数

String::String(const char *m) { size=strlen(m);


C++给学生习题第7章练习题.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:浙江专升本各类别所含专业对照表2014版 - 图文

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: