西安石油大学大二(上)C++面向对象程序设计课件各章习题

}

A y(a,6);

for(int i=0; i<4; i++) d*=x.Get(i); cout<<\cout<<\

int d=1;

int f=y.SumA(5);

9.31 设计一个日期类,其输出格式是:“月/日/年”或“June 13,1993”,再编写一个测试程序,要求测试程序能实现两种输出格式的输出。 (提示:利用构造函数重载和输出成员函数重载。) 9.32 设计一个分数类。要求:

(1)分数类中包含的分数运算有:两个分数的加、减、乘、除运算。 (2)分数的输出格式是:分子/分母。

(3)编写一个测试程序进行测试。

(提示:分数类的成员变量应该有两个,即分子和分母。) 9.33 设计一个电视机类。要求:

(1)电视机的属性包括商品编号、商品型号、生产厂家、大小、重量、开/关状态。

(2)电视机的行为包括输出所有属性。 (3)要求商品编号自动生成。 (提示:利用static成员变量。)

9.34 编写一个基本账户类。成员变量包含有账号、储户姓名和存款余额;成员函数有存款和取款。并编写一个测试程序进行测试。

9.35 设计一个长方形类。成员变量包括长度和宽度;成员函数除包括计算周长和计算面积外,还包括用set方法来设置长方形的长度和宽度,以及用get方法来获得长方形的长度和宽度。最后,编写一个测试程序来测试所定义的长方形类能否实现预定的功能。

9.36 设计一个汽车性能类,其成员变量包括:颜色、品牌、车门、车灯、行驶速度;其方法包括:成员函数包括:打开车门、打开车灯、加速、减速等。最后,编写一个测试程序进行测试。

(提示:在成员函数中用输出成员函数名来表示该成员函数被调用。)

21

习题4

基本概念题: 9.1 填空题:

(1)一个类的成员函数也可以成为另一个类的友元函数,这时的友元说明必须在函数名前加上 的限定。

(2)重载运算符时,该运算符的__________、结合性以及操作符的个数不允许改变。

(3)一个单目运算符作为类的成员函数重载时有________个参数;如果作为独立函数重载,则有________个参数。

(4)一个双单目运算符作为类的成员函数重载时有________个参数;如果作为独立函数重载,则有________个参数。

(5)作为类的成员函数重载一个运算符时,参数表中只有一个参数,说明该运算符有________个操作数。

9.2 选择题:

(1) 当将一个类A或函数f()说明为另一个类B的友元后,类A或函数f()能够直接访问类B的( )。

A. 只能是公有成员 B. 只能是保护成员 C. 只能是除私有成员之外的任何成员 D. 具有任何权限的成员 (2)引入友元的主要目的是为了( )。

A. 增强数据安全性 B. 提高程序的可靠性 C. 提高程序的效率和灵活性 D. 保证类的封装性 (3)一个类的成员函数也可以成为另一个类的友元函数,这时的友元说明( )。 A. 需加上类域的限定 B. 不需加上类域的限定 C. 类域的限定可加可不加 D. 不需要任何限定 (4)在重载一个运算符时,其参数表中没有任何参数,这表明该运算符是( )。 A. 作为友元函数重载的1元运算符 B. 作为成员函数重载的1元运算符 C. 作为友元函数重载的2元运算符 D. 作为成员函数重载的2元运算符 (5)在成员函数中进行双目运算符重载时,其参数表中应带有( )个参数。 A. 0 B. 1 C. 2 D. 3

(6)双目运算符重载为普通函数时,其参数表中应带有( )个参数。 A. 0 B. 1 C. 2 D. 3

(7)如果表达式a+b中的“+”是作为成员函数重载的运算符,若采用运算符函数调用格式,则可表示为( )。

A. a.operator+(b) B. b.operator+(a) C. operator+(a,b) D. operator(a+b)

(8)如果表达式a==b中的“==”是作为普通函数重载的运算符,若采用运算符

22

函数调用格式,则可表示为( )。

A. a.operator==(b) B. b.operator==(a) C. operator==(a,b) D. operator==(b,a)

(9)如果表达式a++中的“++”是作为普通函数重载的运算符,若采用运算符函数调用格式,则可表示为( )。

A. a.operator++() B. operator++(a) C. operator++(a,1) D. operator++(1,a)

(10)如果表达式++a中的“++”是作为成员函数重载的运算符,若采用运算符函数调用格式,则可表示为( )。

A. a.operator++(1) B. operator++(a) C. operator++(a,1) D. a.operator++() (11)关于运算符重载,下列说法正确的是( )。 A. 重载时,运算符的优先级可以改变。 B. 重载时,运算符的结合性可以改变。 C. 重载时,运算符的功能可以改变。

D. 重载时,运算符的操作数个数可以改变。 (12)关于运算符重载,下列说法正确的是( )。 A. 所有的运算符都可以重载。

B. 通过重载,可以使运算符应用于自定义的数据类型。 C. 通过重载,可以创造原来没有的运算符。 D. 通过重载,可以改变运算符的优先级。 (13)假定K是一个类名,并有定义“K k; int j;”,已知K中重载了操作符 ( ),且语句“j=k(3);”和“k(5)=99;”都能顺利执行,说明该操作符函数的原形只可能是( )。

A. K operator ( ) (int); B. int operator ( )(int&); C. int & operator ( )(int); D. K &operator( )(int); (14)假定M是一个类名,且M中重载了操作符=,可以实现M对象间的连续赋值,如“m1=m2=m3;”。重载操作符=的函数原型最好是( )。

A. int operaotor=(M); B. int operator=(M&); C. M operator=(M&); D. M& operator=(M); (15)下面是重载双目运算符-的成员函数原形,其中最符合-原来含义的是( )。 A. Value Value::operator-(Value); B. Value Value::operator-(int); C. Value& Value::operator-(Value); D. Value& Value::operator-(Value&); 9.3 什么叫友元? 友元包括几种? 9.4 友元方法有什么优点和缺点?

9.5 友元类是否具有相互性?友元类是否具有传递性?友元类是否具有继承

23

性?

9.6 利用友元类或友元函数方法设计的程序是否可以提高程序运行效率?试举一例说明。

9.7 什么叫重载?什么叫运算符重载?运算符重载有什么意义?

9.8 哪些运算符可以重载?哪些运算符不可以重载?运算符重载有什么限制? 9.9 系统是怎样解释重载为成员函数的运算符的?系统是怎样解释重载为友元函数的运算符的?

9.10 哪些运算符最好应重载为成员函数形式? 哪些运算符最好应重载为友元函数形式?

9.11 输入运算符(<<)和输出运算符(>>)能重载为类的成员函数吗?为什么? 9.12 在C++语言中,当一个类没有设计赋值操作时,系统自动提供一个默认赋值操作,并把赋值操作重载为运算符(=)。分析为什么在例4.5的设计中,程序一定要重载赋值运算符?

9.13 分析例4.5的程序,说明Array类是怎样保证数组元素不越界的?控制数组元素越界对程序的可靠性有什么好处?

9.14 分析例4.6的程序,说明和C语言的字符串相比,String类有什么优点?

程序阅读和设计题:

9.15 阅读程序,给出运行结果:

#include \class sam {

private:

int x; sam() { }

void print() { }

void operator++() { }

x+=10;

cout<<\x=0;

public:

void operator--()

24

};

void main() { }

sam s; s.print(); ++s; s.print(); --s; s.print(); { }

x-=3;

9.16 在例4.2的基础上,增加判两个复数对象是否不相等的成员函数。

9.17 在例4.2的基础上,增加判两个复数对象是否不相等的成员函数。要求: (1)重载为类的成员函数。 (2)重载为类的友元函数。

9.18 完善例4.6的String类设计。要求: (1)逻辑操作再包括:逻辑不等于(=!)、逻辑小于(<)、逻辑小于等于(<=)、逻辑大于(>)、逻辑大于等于(>=)。

(2)字符串操作再包括:字符串连接(+)、字符串连接赋值(+=)。 (3)上述操作都要求运算符重载。

(4)设计一个可以测试各种运算符重载情况的测试程序,并进行测试。

9.19 设计一个矩阵类。要求: 矩阵类中重载加(+)、减(-)、乘(*)、赋值(=)和加赋值(+=)运算符。

25

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4