C++II习题及其解答(第1版).pdf
《C++II习题及其解答(第1版).pdf》由会员分享,可在线阅读,更多相关《C++II习题及其解答(第1版).pdf(32页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、习题及其解答第 5 章 类与对象5.1选择题第7章第8章第9章第10章1. 在下列结构变量的定义中,不正确的是( d )。(a) struct employee(b) struct char name 20 ; char name 20 ; long code ; long code ; emp ; emp ;(c) struct employee(d) struct char name20; char name20;long code; long code; ; employee;employee emp;employee emp;2已知有职工情况结构变量emp定义为:struct empl
2、oyee char name 20 ;long code ;struct int year ;int month ; int day ; birth ; emp ;下列对 emp 的 birth 正确赋值方法是( d )。(a) year = 1980 ; month = 5 ; day = 1 ;(b) birth.year = 1980 ; birth.month = 5 ; birth.day = 1 ;(c) emp.year = 1980 ; emp.month = 5 ; emp.day = 1 ;(d) emp.birth.year = 1980 ; emp.birth.mont
3、h = 5 ; emp.birth.day = 1 ;3假定有以下声明和定义,则下面引用形式错误的是( b )。1struct student int num ;float score ; stu3 = 1001,80,1002,75,1003,91, *p = stu ;(a) p-num(b) (p+).num(c) (p+)-num(d) (*p).num4下列四个运算符中,优先级最低的是( a )。(a) + (b) . (c) -(d) ()5若有以下声明和定义,则下列错误的引用是( d )。struct worker int no ;char name 20 ; w, *p &w
4、;(a) w.no (b) p-no (c) (*p).no(d) *p.no6若有以下声明和定义,则下列引用非法的是( d )。struct data int n;float score;data *q ;data a3 = 1001,87,&a1,1002,75,&a2,1003,90,&a0;data *p = a;(a) p-n+(b) (*p).n+(c) +p-n(d) *p-n7关于类和对象不正确的说法是( c )。(a) 类是一种类型,它封装了数据和操作(b) 对象是类的实例(c) 一个类的对象只有一个(d) 一个对象必属于某个类8在类定义的外部,可以被访问的成员有( c )。
5、(a) 所有类成员 (b) private或protected的类成员(c) public的类成员 (d) public或private的类成员9关于this指针的说法错误的是( a,d )。(a) this指针必须显式说明(b) 当创建一个对象后,this指针就指向该对象(c) 成员函数拥有this指针(d) 静态成员函数拥有this指针10声明一个类的对象时,系统自动调用( b,d )函数;撤消对象时,系统自动调用( c )函数。(a) 成员函数(b) 构造函数 (c) 析构函数(d) 复制构造函数11下面对构造函数的不正确描述是( b )。第11章 (a) 系统可以提供默认的构造函数(b
6、) 构造函数可以有参数,所以也可以有返回值2(c) 构造函数可以重载(d) 构造函数可以设置默认参数12下面对析构函数的正确描述是( a,c )。(a) 系统可以提供默认的析构函数 (b) 析构函数必须由用户定义(c) 析构函数没有参数 (d) 析构函数可以设置默认参数13对静态成员的不正确描述是( c,d )。(a) 静态成员不属于对象,是类的共享成员(b) 静态数据成员要在类外定义和初始化(c) 调用静态成员函数时要通过类或对象激活,所以静态成员函数拥有this指针(d) 只有静态成员函数可以操作静态数据成员14下面选项中,不是类的成员函数为( c )。(a) 构造函数(b) 析构函数 (
7、c) 友元函数 (d) 复制构造函数15下面对友员的错误描述是( d )。(a) 关键字friend用于声明友员(b) 一个类中的成员函数可以是另一个类的友员(c) 友员函数访问对象的成员不受访问特性影响(d) 友员函数通过this指针访问对象成员5.2阅读下列程序,写出执行结果4 #include class A public :int f1();int f2();void setx( int m ) x = m ; cout x endl; void sety( int n ) y = n ; cout y endl; int getx() return x ; int gety() re
8、turn y ; private :int x, y ;int A:f1() return x + y ; int A:f2() return x - y ; void main() A a ;a.setx( 10 ) ;a.sety( 5 ) ;cout a.getx() t a.gety() endl ;cout a.f1() t a.f2() endl ;3答案:10510 515 55 #include class T public : T( int x, int y ) a = x ; b = y ; cout 调用构造函数1. endl ; cout a t b endl ; T(
9、 T &d ) cout 调用构造函数2. endl ; cout d.a t d.b endl ; T() cout 调用析构函数.endl; int add( int x, int y = 10 ) return x + y ; private : int a, b ;void main() T d1( 4, 8 ) ; T d2( d1 ) ; cout d2.add( 10 ) endl ;答案:调用构造函数 1.4 8调用构造函数 2.4 8 20调用析构函数.调用析构函数.6 #include 4class T public: T(int x) a=x; b+=x; static
10、void display(T c) couta=c.atb=c.bendl; private: int a; static int b; ;int T:b=5;void main() T A(3),B(5); T:display(A); T:display(B);答案:a=3 b=13a=5 b=137 #include #include class point public : point( float x, float y ) a = x; b = y; cout 点( a , b ) ; friend double d( point &A , point &B ) return sqrt
11、(A.a-B.a) * (A.a-B.a) + (A.b-B.b) * (A.b-B.b) ; private: double a, b ;void main() point p1( 2, 3 ) ;cout 到 ; point p2( 4, 5 ) ; cout 的距离是: d( p1,p2 ) endl ;答案:点(3,4)到点(4,5)的距离是:2.8284358 #include class A public : A() a = 5 ; void printa() cout A:a = a endl ; private : int a ; friend class B ; ;class
12、 B public: void display1( A t ) t.a + ; cout display1:a = t.a endl ; ; void display2( A t ) t.a - ; cout display2:a = t.a endl ; ;void main() A obj1 ; B obj2 ; obj1.printa() ; obj2.display1( obj1 ) ; obj2.display2( obj1 ) ; obj1.printa() ;答案:A:a = 5display1:a = 6display2:a = 4A:a = 55.3编程题6 定义一个 Boo
13、k(图书)类,在该类定义中包括数据成员: bookname(书名) 、price(价格)和 number(存书数量) ;成员函数: display()显示图书的情况;borrow()将存书数量减 1,并显示当前存书数量;restore()将存书数量加 1,并显示当前存书数量。在 main 函数中,要求创建某一种图书对象, 并对该图书进行简单的显示、 借阅和归还6管理。解答:#include #include #include class Book public: void setBook(char*,float,int); void borrow(); void restore(); void
14、 display(); private: char bookname40; float price; int number;/在类外定义 Book 类的成员函数void Book:setBook(char *name, float pri, int num) strcpy(bookname, name); price=pri; number=num;void Book:borrow() if (number=0 ) cout 已没存书,退出! endl; abort(); number = number - 1; cout 借一次,现存书量为: number endl;void Book:re
15、store() number = number + 1; cout 还一次,现存书量为: number endl;void Book:display() cout 存书情况: endl bookname: bookname endl price: price endl number: number endl;7void main() char flag, ch; Book computer; computer.setBook( c+程序设计基础 , 32, 1000 ); computer.display(); ch = y; while ( ch = y ) cout flag; switc
16、h ( flag ) case b: computer.borrow(); break; case r: computer.restore(); cout ch; computer.display();7 定义一个 Box(盒子)类,在该类定义中包括数据成员: length(长) 、width(宽)和 height(高) ;成员函数: 构造函数 Box 设置盒子长、宽和高三个初始数据;函数volume 计算并输出盒子的体积。在 main 函数中,要求创建 Box 对象,并求盒子的体积。解答:略。8 定义一个 Student 类,在该类定义中包括:一个数据成员 score(分数)及两个静态数据成
17、员 total(总分)和学生人数 count;成员函数 scoretotalcount(float s) 用于设置分数、求总分和累计学生人数;静态成员函数 sum()用于返回总分;静态成员函数average()用于求平均值。在 main 函数中,输入某班同学的成绩,并调用上述函数求全班学生的总分和平均分。解答:类声明如下,实现代码略。class student public: void scoretotalcount( float ) ; static float sum(); static float average();8 private: float score; static floa
18、t total; static float count;float student:total = 0;float student:count = 0;9 定义一个表示点的结构类型 Point 和一个由直线方程 y = ax + b 确定的直线类Line。结构类型Point 有 x 和 y 两个成员,它们分别表示点的横坐标和纵坐标。 Line 类有两个数据成员a和b, 它们分别表示直线方程中的系数a和b。 Line类有一个成员函数print用于显示直线方程;友员函数 setPoint(Line &l1,Line &l2)用于求两条直线的交点。在main 函数中,建立两个直线对象,分别调用pri
19、nt 函数显示两条直线的方程,并调用函数setPoint 求这两条直线的交点。解答:结构和类声明如下,实现代码略。struct Pointfloat x; float y;class Line public: line( float , float ); /构造函数 void print()private: float a, b; /显示直线方程 friend point setpoint(line &l1,line &l2);/求两条直线交点/线类/点结构第 6 章 运算符重载6.1选择题1.在下列运算符中,能重载的是( a,c,d )。(a) !(b) sizeof(c) new2. 在下
20、列运算符中,不能重载的是( c )。(a) (c) &(d) delete(d) &=93.下列关于运算符重载的描述中,( d )是正确的。(a) 可以改变参与运算的操作数个数(b) 可以改变运算符原来的优先级(c) 可以改变运算符原来的结合性(d) 不能改变原运算符的语义4.下列函数中,能重载运算符的函数是( b,c )。(a) 成员函数 (b) 构造函数(c) 析构函数 (d) 友员函数5.不能用友员函数重载的是( a )。(a) =(b) = (c) +=(d) !=6.下面描述中,错误的是( b )。(a) 只有系统预先定义的运算符才可能被重载(b) 使用类型转换函数不能把一个类转换为
21、另一个类(c) 使用类型转换函数可以把类转换为基本类型(d) 类型转换函数只能定义为一个类的成员函数,不能定义为类的友员函数6.2阅读下列程序,写出执行结果 1.#include 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 , b , c;T T:operator * (
22、 T obj ) T tempobj; tempobj.a = a * obj.a; tempobj.c = c * obj.c;void main() T obj1( 1,2,3 ), obj2( 5,5,5 ), obj3; int a , b , c; obj3 = obj1 * obj2; obj3.get( a, b, c ); tempobj.b = b * obj.b; return tempobj;10 cout ( obj1 * obj2 ): t a = a t b = b t c = c t endl; ( obj2 * obj3 ).get( a, b, c ); co
23、ut ( obj2 * obj3 ): t a = a t b = b t c = c t endl;答案: ( obj1 * obj2 ): a = 5 b = 10 c = 15 ( obj2 * obj3 ): a = 25 b = 50 c = 752.#include 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
24、.x ; tempvector.y = v1.y + v2.y ; return tempvector ; void display() cout ( x , y ) endl ; private: int x , y ;void main() vector v1( 1, 2 ), v2( 3, 4 ), v3 ; cout v1 = ; v1.display() ; v2.display() ; v3 = v1 + v2 ; cout v3 = v1 + v2 = ; v3.display() ; cout v2 = ; 答案: v1 = ( 1, 2 )11 v2 = ( 3, 4 ) v
25、3 = v1 + v2 = ( 4, 6 )6.3编程题1分别使用成员函数和友员函数编程序重载运算符 “+” ,使该运算符能实现两个字符串的连接。解答:略。2.设向量 X = ( x1,x2,x3) 和 Y = ( y1, y2,y3),则它们之间的加、减和积分别定义为: X + Y = ( x1+ y1, x2+ y2, x3+ y3) X - Y = ( x1- y1, x2- y2, x3- y3) X * Y = x1* y1+ x2* y2+ x3* y3编程序对运算符“+” 、 “-”和“*”重载,实现向量之间的加、减、乘运算。解答:略。3. 定义一个类 nauticalmile_
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- II 习题 及其 解答
限制150内