《面向对象程序设计作业.doc》由会员分享,可在线阅读,更多相关《面向对象程序设计作业.doc(11页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、【精品文档】如有侵权,请联系网站删除,仅供学习与交流面向对象程序设计作业.精品文档. C+程序设计 第一次作业一、 问答题1、 什么是面向对象程序设计?面向对象程序设计的优点是什么?2、 什么是类?什么是对象?它们之间关系如何?3、 C+的主要特点有哪些?4、 什么叫函数重载?什么叫运算符重载?请书写一个函数重载的程序例子,分别计算圆、矩形、三角形的图形面积。5、 使用内联函数的优点是什么?如何将函数说明为内联函数?6、 构造函数和析构函数的主要特点各是什么?7、 什么是this指针?它的主要作用是什么?8、 什么是拷贝构造函数?在哪三种情形下会触发拷贝构造函数的执行?9、 什么是友元函数?使
2、用它有什么好处?10、 什么情况下需要预约存贮空间?试解释下列程序每一语句的含义。 float *p; p=new float10; for( int i=0;i=9;i+,p+)*p=i;11、如果要释放上一题中指针p所指的空间,应如何操作?二、 程序设计题(1) 建立一个三角形类tri,有三个私有数据a,b,c,设计一个缺省的3参数构造函数,缺省值分别为3,3,3,再设计一个成员函数showarea,当参数能组成三角形时输出面积值,否则输出-1。(2) 建立一个类book,有二个私有的数据成员qu和price,建立一个有5个元素的数组对象,将qu初始化为1,2,3,4,5,将price初始
3、化为qu的10倍,并设计一个成员函数disp,输出每个对象的qu*pricer的值。(3) 有一个向量类vector,包括一个点的坐标位置x和y,设计二个友元函数,实现两个向量的加法和减法运算。(4) 编写一个程序,设计一个类score,用于统计一个班的学生成绩,其中使用一个静态数据成员sumfs存储总分和一个静态成员函数rsumf()返回该总分。三、 分析题请仔细阅读下列程序,回答问题。1: #include 2: class exam3: int i;4: public :5: exam(int n)i=n;coutconstructing.n;6: exam()coutdestructi
4、ng.n;7: int get_i()return i;8: ;9: int sqr_it(exam s)10: 11: return s.get_i()*s.get_i();12: 13: void main()14: 15: exam x(11);16: coutx.get_i()endl;17: coutsqr_it(x)get_i()*s-get_i();12: 并将第17行改为17: coutsqr_it(&x)endl; 请写出此时该程序的运行结果。 第二次作业一、 简答题 1、 什么是类?什么是对象?2、 什么叫函数重载和运算符重载?使用重载有何优点?3、 何谓内联函数?采用内联
5、函数有何好处? 4、 构造函数和析构函数的主要作用是什么?5、 类成员的访问控制属性有哪三种?我们在外部只能访问具备有哪一种属性的对象成员?6、 在什么情况下应当采用成员初始化列表方式传递数据?7、 拷贝构造函数的参数与一般的构造函数有何不同?在哪三种情况下拷贝构造函数被执行?8、什么是this指针?它的主要作用是什么?二、 判断题 1、定义一个整型指针p,在内存中预约10个连续单元,p指向这10个单元之首,可以使用以下语句操作。( ) int *p=new int (10);2、如果定义 char *const name=yang,则可执行name=new char4; ( )3、从一个类定
6、义的各个不同的具体对象,其结构不相同。( )4、类的构造函数可以用public、private或protected中任一访问属性说明。( )5、重载运算符既可改变其执行功能,又可改变它的基本语法形式。( )6、利用模板可以大幅度地节约程序代码。( )7、引入虚基类的好处是防止最派生类对继承成员的二义性。( )8、虚函数的定义在基类中进行,此虚函数就可以在一个或多个派生类中被重新定义,但函数的返回类型、函数名、形参个数和类型必须相同。( )9、当某个函数以对象为参数时,调用这个函数必定会执行类的拷贝构造函数。( )10、 在可以重载的运算符中,并不是都可使用友元函数进行重载的。( )三、 填空题
7、 1、构造函数的名字必须与 相同,可以有任意类型的形参,但 返回类型,且访问控制属性为 ,当其参数为 时,称之为拷贝构造函数。2、已经定义好了一个类student,现在要定义一个类pupil,它是从student私有派生而来,那么,定义pupil类的写法是 。3、由于不能直接对一个类的二个对象做加法,因此,必须对+进行 ,这主要由名为 +(参数表)的函数完成。4、动态内存分配采用 语句,释放这种方式分配的内存空间则用 语句。5、在C+中,单行注释或行尾注释通常采用 进行。四、 综合分析题 1、 分析下列程序中继承的关系。(3分)2、 指明构造函数和析构函数执行顺序。(5分)3、 写出程序的运行
8、结果。(7分) #include iostream.h class A public: A()a=0;coutA:default con.endl; A(int i)a=i;coutAs con.endl; A()coutAs des.endl; void print() coutaendl; int geta() return a;private: int a; class C public: C()c=0;coutC:default con.endl; C(int i)c=i;coutCs con.endl; C()coutCs des. endl; void print() coutce
9、ndl; int getc()return c;private: int c;class B:public A,public C public: B()b=0;coutB:default con.endl; B(int i,int j,int k,int l,int n):A(i),C(j),cc(k),aa(l),b(n)coutBs con.endl; B()coutBs des.endl; void print() A:print();C:print();coutb,aa.geta()endl;coutcc.getc()endl; private: int b; C cc; A aa;v
10、oid main()B bb(1,2,3,4,5);bb.print();五、 程序设计题 1、应用 C+的多态性,计算三角形、矩形和圆的面积。建议公共基类命名为Figure,含有二个数据成员及纯虚函数,形式如下: Class Figure protected: float x,y; public: Figure(float a,float b)x=a,y=b; virtual void show_area()=0; 三角形类、矩形类和圆类命名分别为Tri 、Rec 、Cir,并在主函数中写出一个调用的例子,三角形对象、矩形对象和圆对象的初始数据为(3,4,5)、(2,4),(10)。最后请写
11、出你的程序运行结果。2、编写程序,设计一个时间类Time,它的基本定义如下:class Time int hour,minute,second;public: Time(); Time(int h,int m,int s) hour=h,minute=m,second=s; void show()coutTime ishour:minute:second”Hello wordn”B. cin” Hello wordn”C. cout” Hello wordn”D. cin” Hello wordn”8 在下面几个元素中,不是面向对象的要素的是( ); A. 重载 B. 对象 C. 类 D. 继
12、承9 对于int *pa5;的描述,下面叙述正确的是( );A. pa是一个指向数组的指针,所指向的数组是5个int型元素;B. pa是一个指向某数组中第5个元素的指针,该元素是int型变量;C. pa是一个具有5个元素的指针数组,每个元素是一个int型指针;D. pa5表示某个数组的第5个元素的值。10. 下面程序使用new与delete命令:#include main( ) long *p , i; p=new long; if(!p) cout”Allocation errorn”;return 1;*p=1000;i=(long)p;cout”Here is integer at p:
13、”*p”n”;cout”Here is i: “i。10构造函数和析构函数都可以重载,因为它们都是成员函数。三、 写出下面程序的输出结果。1#includevoid main() int a,b,c; a=1,b=2,c=a+b+3; couta”,”b”,”cendl; c=(a+,a+=6,a+b); coutcendl; 2. #include void swap(int &x,int &y) int temp; temp=x; x=y; y=temp; cout”x=”x”,”y=”yendl;void main() int a(5),b(9); swap(a,b); cout”a=”
14、a”,”b=”bendl; 3. #include class A public :A( );A(int i,int j);void print( ); private : int a,b; A:A( ) a=b=0; cout”Default constructor called.n”; A:A(int i,int j) a=i; b=j; cout”Constructor called.n”; void A:print( ) cout”a=”a”,b=”bendl; void main( ) A m,n(4,8); m.print( ); n.print( );四、 编程或程序填空。 1在
15、下划线处填上正确的语句并给出程序的输出结果(6分)。 #include #include _(1)_ class strA public:strA(float,float,float);_(2)_;_(3)_; public:float a,b,c; float strA:fun1( ) return a+b+c; strA:strA(float i,float j,float k) a=i; b=j; c=k; double strA:fun2( ) float s; s=float(a+b+c)/2.0); return sqrt(s*(s-a)*(s-b)*(s-c); void mai
16、na( ) strA tri(3,4,5); couttri.fun1( )endl; couttri.fun2( )endlin;2编写分别可求两个整型、浮点型和双精度型数和的重载函数,并写主函数调用之;3使用引用作为函数参数,编写一个交换两变量值的函数,并写主函数调用之。 C+模拟试题2一、 选择题(在A、B、C、D四个答案中选择一个正确的填入后面的括号中)1. C+中,封装是借助于( )达到的。E 指针 B. 类 C. 数组 D. 函数3 宏定义由()结束。A 分号 B. 句号 C. 新行 D. 冒号3. 下面是关于一个类的友元的说法,其中不正确的是( )A 友元函数可以访问该类的私有数
17、据成员B 友元的声明必须放在类的内部C 友元函数可以是类的成员函数D 类与类之间的友元关系不能被继承4. C+中声明常量的关键字是( )。A. const B. extern C. public D. enum 5. 关于动态联编的下列描述中,错误的是( )。A. 动态联编是以虚函数为基础的B. 动态联编时在运行时确定所调用的函数代码的C. 动态联编调用函数操作是使用指向对象的指针或对象引用D. 动态联编是在编译时确定操作函数的6. 下面函数( )的表示方法说明它使用对象的引用作为参数。A. test(pt *p) B. test(pt p)C. test(pt &p) D. test(con
18、st P)7. 虚函数的调用()。A 一定使用动态联编B 必须使用动态联编C 一定使用静态联编D 不一定使用动态联编8 关于C+与C语言的关系的描述中,错误的是( );A. C语言是C+的子集; B. C语言与C+是兼容的;CC+对C语言进行了一些改进; D. C+和C语言都是面向对象的。9重载函数在调用时选择的依据中,( )是错误的。 A. 参数个数 B. 参数类型 C. 函数名字 D. 函数类型 10. 下面的程序是关于函数承载的,假定A,B,C,D是它们可能的输出之一,其中正确的输出是( )。A. 25 10 B. 20 10 C. 20 11.4 D. 20 14.076源程序如下:#
19、includeint Multiply(int n1, int n2) return n1*n2;float Multiply(int f1, float f2)return f1*f2;void main( ) int a1=10; int a2=2.5; float b1=2.55; float b2=5.52; coutMultiply(a1,a2)endl;coutMultiply(b1,b2)b ? +a: +b; 2. 写出下面程序的输出结果。(1) #include void fun( ) static int n=25; n - -; cout ”n=”nendl;void m
20、ain( ) for(int i=0;i2; i+) fun( );(2) #include class Base public :void Setc(char a)c2=(c1=a)-32;void Show( ) coutc1” can be upwritten as: “c2endl; private: char c1,c2; void main( ) Base a,b;a. Setc(a);b. Setc(b);a. Show( );b. Show( );(3) 定义类Tpoint如下:class TPointpublic: TPoint(int x,int y)X=x;Y=y; TP
21、oint(TPoint &p); TPoint( )cout”destructor Called.n”; int GetX( )return X; int GetY( )return Y;private : int X,Y;TPoint:TPoint(TPoint &p) X=p.X; Y=p.Y; 并将其存入tpoint.h文件中,分析并写出下面主函数的执行结果: #include #include void main( ) TPoint P1(5,7); TPoint P2(P1); cout”P2=”P2.GetX( )”,”P2.GetY( )endl;四、编程或程序填空。1 在下划线处填上正确的语句成分,并编写一个测试主程序。#includeclass Test public : Test(int a,int b) _(1)_ void show( ) _(2)_ private : int x,y;2 编写分别可计算2、3或4个int型数的和的重载函数,并写主函数调用之;3. 设计一个类,使它具有一个求两个整数中较大者的成员函数以及输出成员函数,并写一个测试程序。
限制150内