OOP技术:面向对象技术1-10章习题

合集下载

c面向对象程序设计课后习题

c面向对象程序设计课后习题

c面向对象程序设计课后习题面向对象程序设计是一种以对象为基本单位的编程范式,它强调数据和行为的封装、继承和多态性。

以下是一些面向对象程序设计的课后习题,旨在帮助学生巩固和深化对面向对象概念的理解。

习题一:封装的实现1. 定义一个类 `Person`,包含私有属性 `name` 和 `age`。

2. 实现公共方法 `getName()` 和 `setName(String name)` 来获取和设置 `name` 属性。

3. 实现公共方法 `getAge()` 和 `setAge(int age)` 来获取和设置`age` 属性。

4. 添加一个构造器,允许在创建 `Person` 对象时初始化 `name` 和`age`。

习题二:继承的应用1. 定义一个基类 `Vehicle`,包含属性 `speed` 和方法 `move()`.2. 创建一个派生类 `Car`,继承自 `Vehicle`,添加属性 `wheels` 和 `color`.3. 重写 `move()` 方法,以反映汽车的移动特性。

4. 添加一个构造器,允许初始化 `Car` 对象的所有属性。

习题三:多态性的使用1. 定义一个接口 `Animal`,包含一个抽象方法 `makeSound()`.2. 创建几个实现类,如 `Dog`,`Cat`,`Bird`,它们都实现了`Animal` 接口。

3. 为每个类实现 `makeSound()` 方法,以产生不同的声音。

4. 编写一个测试类,创建 `Animal` 类型的数组,包含不同种类的动物对象,并调用 `makeSound()` 方法。

习题四:抽象类的使用1. 定义一个抽象类 `Shape`,包含抽象方法 `calculateArea()`.2. 创建几个具体类,如 `Circle`,`Rectangle`,`Triangle`,它们继承自 `Shape` 并实现 `calculateArea()` 方法。

oop基础数学习题集

oop基础数学习题集

oop基础数学习题集第一部分:一.选择填空题1.类成员缺省的访问特征是___,结构体缺省的访问权限是___.A. protectedB. publicC. privateD. friend 2.下列关于类的成员的访问特征的描述中,正确的___A.必须首先说明具有私有特征的成员B.数据成员必须说明成私有的,成员函数必须说明成私有的C.每个成员前都必须有标明访问特性的关键字D.在同一类中,说明访问特性的关键字可以多次使用3.关于类和对象,下列说法不正确的是___A. 类与对象的关系类似于数据类型与变量的关系B.对象是类的一个实例C.任何一个对象必定属于一个特定的类D.一个类只能有一个对象4.关于类的一个成员函数,下列说法中正确的是()A.必须在类内定义B. 一定是内联函数C.不可以重载D.可以设置参数的缺省植5.已知一个类,类名为A,可以定义A类的对象或定义A类的指针,下列一定不正确的形式为____A. A a1B. A a2 ( 16 )C. A A3( )D. A *P= new A6. 已知一个类COMPLEX, 有下述两行:Complex c ; //AComplex c() //B以下描述中错误的是___A. A行定义了一个对象,并调用缺省的构造函数B. B行定义了一个对象,并调用缺省的构造函数C. B行是一个函数的原型说明,函数名为C,函数没有参数,返回值类型是ComplexD. A行和B行两行的意义不一样7.设有下列对象定义;class A{public :int a ,b ;} a1= {1,2}, a2 ,a3 ;class{public :int a,b;}a4 ;则以下正确的定义或赋值形式是___A. a3=a2=a1;B. a4=a1;C. A *p=&a4D. A &re=a48. 下列描述中, ___不是构造函数的特征A. 构造函数可以重载B. 必须显示为类定义一个构造函数C. 无须为构造函数指定返回值类型D. 构造函数在产生对象时由系统自己调用9.下列有关析构函数的描述中,正确的是___A. 析构函数的定义只能在类体内B. 析构函数可以有一个或多个参数C. 析构函数是在撤消对象时,系统自动调用的D. 析构函数可以重载10.以下关于构造函数和析构函数的描述中错误的是___A. 用户不定义缺省的构造函数,则系统自动生成一个缺省的构造函数B. 若用户不定义拷贝的构造函数,则系统自动生成一个拷贝的构造函数C. 若用户不定义析构函数,则系统自动生成一个析构函数D. 以上A错误,而B,C正确11.定义复数类如下;class Complex{ double real ,image ;public:Complex (double r=0 ,double i=0 ) {real =r ; image =i ;}Complex (Complex &c) {real=c.real ; image=c .image ;}};若有Complex c1; //AComplex c2(3,5); //BComplex c3(c2); //Cc2=c1; //D则下列描述中正确的是___A. C行和D行均调用了拷贝构造函数B. C行调用了拷贝构造函数C. B行调用了拷贝构造函数D. A行调用了拷贝构造函数12. class A{int x, int y ;public ;A (int a, int b ) {x=a;y=b;}void show(){cout<<x<<?,?<<y<<endl;}< p="">void set(int a,int b){x=a;y=b;}};void main(){A obj;obj.set(3,5);obj.show();}对上述过程段,以下说法中,正确的是___A.编译时报错,程序无法运行B.编译时无错,运行正常,输出3,5C.编译无错,运行时报错D.编译时报警告错,但运行正常,输出3,513.在下列程序中,C类的数据成员中有一个A 类对象和一个B 类对象。

OOP技术:面向对象技术1-10章习题

OOP技术:面向对象技术1-10章习题

OOP技术:习题第1章习题1. 什么是面向对象技术?2. 面向对象与面向过程程序设计有什么不同?3. 面向对象技术有哪些优点?4. 面向对象技术中的封装性有何优缺点?如何克服这些缺点?5. 为什么要应用继承机制?6. C++对多态性的支持体现在哪些方面?7. 目前常用的面向对象程序设计语言有何异同?8. 什么是.NET?第2章习题1. 写出下面程序的运行结果。

#include <iostream.h>void main(){int* a;int* &p=a;int b=10;p=&b;cout<<*a<<endl;cout<<*p<<endl;}2. 写出下面程序的运行结果。

#include <iostream.h>void main(){int iarray[10]={0,2,4,6,8,10,12,14,16,18};int sum=0;int* iptr=iarray;for(int i=0;i<10;i++){sum+=*iptr;iptr++;}cout<<"sum is"<<sum<<endl;}3. 写出下面程序的运行结果。

#include <iostream.h>int m=8;int add3(int x,int y=7,int z=m){ return x+y+z; }void main(){int a=1,b=2,c=3;cout<<add3(a,b)<<endl;cout<<add3(10)<<endl;}4. 编程求所有的水仙花数。

如果一个三位数的个位数、十位数和百位数的立方和等于该数本身,则称该数为水仙花数。

5. 编程求1000以内所有素数。

6. 编写一个可以打印任何一年日历的程序。

oop第1次测试

oop第1次测试

OOP第一阶段测试一、填空题1.面向对象的三大特征是:继承和封装和多态。

2.子类不能(能否)继承父类的私有属性和方法。

3.如果一个方法没有方法体,我们应该把他定义成抽象方法。

4.我们应该把有可能出现异常的代码写在try 里面,不管有没有异常都必须执行的代码应该写在finally 里面。

5.JA V A程序中默认导入了包。

6.JA V A的类都是单继承,接口是多继承。

7.用final修改的方法不能被重写,用final修饰的类不能被继承。

8.用static修改的方法能(能否)直接用类名调用。

9.子类必须通过____super______关键字调用父类有参数的构造函数。

10.构造方法能(能否)被重载,不能被重写。

二、问答题1,什么是方法的重载?答:在一个类中,若有个多个方法名一样, 参数列表不一样,可构成重载,与返回值无关!2,抽象类和接口有哪些相同点和不同点?答:抽象类可以有抽象方法和实例方法,也有构造函数接口中所有的方法皆为抽象方法,变量全部为类常量,没有构造函数它们的相同点:一个类若想继承某个抽象类或者说实现某个接口,那么必须实现其中所有抽象方法,否则此类将还是一个抽象类!3,说出throw关键字和throws关键字的作用。

答:throw用来抛出异常对象,throws 用来抛出异常类三、编程题1、输入一个整数,如果输入的不是整数,那么就输出“不是整数”,否则输出这个整数。

Import java.util.Scanner;public class A{public static void main(String[] args){Scanner in = new Scanner(System.in);int num=0;try{num = in.nextInt();System.out.println(num);}catch(InputMismatchException e){System.out.println(“不是整数!”);}}}2.自定义一个接口,接口中有两个方法method1和method2(),再写一个类去实现这个接口。

第10章 面向对象分析

第10章 面向对象分析
软件工程
第10章 面向对象分析
第10章 面向对象分析
• 面向对象软件开发技术
– 面向对象分析(OOA) – 面向对象设计(OOD) – 面向对象实现(OOP)
面向对象技术是一个有全新概念 的开发模式,其特点是:
(1)方法是对软件开发过程所有阶段进 行综合考虑而得到的; (2)从生存期的一个阶段到下一个阶段 所使用的方法与技术具有高度的连 续性;
取消交易
顾客可在按下选择键前任何一个时刻,拉动退币杆取 消交易收回硬币。
自动售货系统系统
-端1 * -端2
自动售货系统::售货
*
顾客
-端2
-端1 *
自动售货系统::供货
*
供货人
-端1 * -端2
自动售货系统::取货款
*
收银员
自动售货系统系统
-端1 *
-端2
售货
*
<<extends>>
售散装饮料
顾客
• 业务中的执行者扮演什么角色?这些角色可以 看作类,如客户、操作员等。
(2)筛选对象类,确定最终对象类 我们可以用以下选择特征来确定最终的对象: 1) 保留的信息:仅当必须记住有关潜在对象的 信息,系统才能运作时,则该潜在对象在分 析阶段是有用的; 2) 需要的服务:潜在对象必须拥有一组可标识 的操作,它们可以按某种方式修改对象属性 的值; 3) 多个属性:在分析阶段,关注点应该是“较 大的”信息(仅具有单个属性的对象在设计 时可能有用,但在分析阶段,最好把它表示 为另一对象的属性);
定义服务
• 对象=属性+操作(服务) • 因为在动态模型和功能模型中更明确地描 述了每个类中应该提供哪些服务,所以在 建立了这两个模型后才能最终确定类中应 有的服务。 • 事实上,在确定类中应有的服务时,既要 考虑该类实体的常规行为,又要考虑在本 系统中特殊需要的服务。

javaoop练习题

javaoop练习题

一、面向对象基础1. 简述面向对象编程的特点。

2. 解释类和对象的关系。

3. 什么是封装?举例说明。

4. 什么是继承?举例说明。

5. 什么是多态?举例说明。

6. 简述Java中的访问控制符。

7. 什么是构造函数?举例说明。

8. 什么是析构函数?举例说明。

9. 什么是抽象类?举例说明。

10. 什么是接口?举例说明。

二、类和对象1. 定义一个名为Person的类,包含姓名、年龄和性别属性,以及相应的构造函数和get/set方法。

2. 定义一个名为Student的类,继承自Person类,增加学号属性,以及相应的构造函数和get/set方法。

3. 定义一个名为Teacher的类,继承自Person类,增加职称属性,以及相应的构造函数和get/set方法。

4. 定义一个名为Student的类,实现一个名为Study的接口,包含一个名为study的方法。

5. 定义一个名为Teacher的类,实现一个名为Teach的接口,包含一个名为teach的方法。

6. 定义一个名为Car的类,包含引擎、轮胎和油箱属性,以及相应的构造函数和get/set方法。

7. 定义一个名为Engine的类,包含功率和转速属性,以及相应的构造函数和get/set方法。

8. 定义一个名为Tyre的类,包含品牌和尺寸属性,以及相应的构造函数和get/set方法。

9. 定义一个名为OilTank的类,包含容量和油量属性,以及相应的构造函数和get/set方法。

10. 定义一个名为Rectangle的类,包含长和宽属性,以及计算面积和周长的方法。

三、继承和多态1. 定义一个名为Animal的抽象类,包含一个抽象方法名为eat。

2. 定义一个名为Dog的类,继承自Animal类,实现eat方法。

3. 定义一个名为Cat的类,继承自Animal类,实现eat方法。

4. 定义一个名为Bird的类,继承自Animal类,实现eat方法。

5. 定义一个名为Mammal的类,继承自Animal类,包含一个方法名为milk。

oop技术:面向对象技术复习思考题.doc

oop技术:面向对象技术复习思考题.doc
11.用typedef可以增加新类型。
12.宏替换不占用运行时间。
13.在include命令行中,用双引号和用尖括号将被包含的文件名括起来没有区别。
14.C++编译中的编译预处理可以看作一行C++语句。
15.头文件必须由系统提供。
16.创建派生类对象时,先调用基类的构造函数,再调用派生类的构造函数,当销毁这个对 象时顺序正好相反,先调用派生类的析构函数,再调用基类的析构函数。
cin » c;
if(c == 'c')
(
cout« "you chose 'c'" « endl;
continue; //返回主菜单
}
if(c == d)
(
cout« "you chose'd'" « endl;
continue; //返回主菜单
}
else
(
cout« "you didn't choose c or d!"« endl;
11.在定义拷贝构造函数时,为什么通常还要定义一个重载的赋值运算符?
12.拷贝构造函数在哪几种情况下调用?
%1.判断题
1.C++语言程序中,要调用的函数必须在main。函数中定义。
2.C++语言程序中,main。函数必须放在程序开始的部分。
3.C++语言程序中,urn语句必须放在函数的最后。
4.C++程序中有调用关系的所有函数必须放在同一源程序文件中。
int k;
for(k=0;k<=l 00;k+=50)

面向对象C++程序设计——各章习题答案

面向对象C++程序设计——各章习题答案

面向对象C++程序设计各章习题参考答案第1章面向对象技术概论一.选择题1. A2. C3. D4. B5. C二.填空题1. 封装、继承、多态性2. 面向对象分析(OOA)、面向对象设计(OOD)、面向对象实现(OOI)、面向对象测试(OOT)和面向对象系统维护(OOSM)。

3. 实例实例4. 多态性5. 消息消息传递第2章 C++简单程序设计一.选择题:1. B2. B3. B4. C5. C6. D7. D8. C9. D 10. C11. A 12. A二.填空题:1.4;2;2;8;12. 103. 04. 87;79;115. (1)x值为6,表达式的值为6(2)x值为6,但表达式的值为5(3)x值为4,表达式的值为4(4)x值为5,表达式的值为5(5)x变为6,y的值为5(6)x变为4,y的值为4(7)x变为6,y的值为25(8)x的值为6,y的值为366. const7. c+i*sizeof (c[i])8. x<=3||x>=109. a<=b&&b!=510. 30 30三.程序分析题:1.s=552.a,b99,96,194100.2,94.8,1963.i,s=15,564.13 15 22 14 645.14 25四.编程题(参考答案):1. 假设数组中含8个元素,参考答案如下:#include<iostream.h>void main(){int c=0,i,a[8],k;cout<<"input a[i]:"<<endl;for(i=0;i<8;i++)cin>>a[i];cout<<"input k:"<<endl;cin>>k;for (i=0;i<8;i++)if (a[i]>=k) c++;cout<<c;cout<<endl;}2. 参考答案:#include<iostream.h>void main(){const int n=50,m=10;int i,j,k;int index[n]; //存放学号float s,score[n],sum; //存放成绩for(i=0;i<n;i++)cin>>index[i]>>score[i]; //从键盘输入数据sum+=score[i];cout.precision(2); //设置输出宽度cout<<endl<<"A verage score:"<<sum/n; //输出平均分数cout.width(28); //设置输出宽度cout<<endl<<"Student ID:"; //输出学号for(i=0;i<10;i++) //选取前m名分数最高的学生,输出其学号及成绩{s=score[i];k=i;for(j=i+1;j<n;j++)if(s<score[j]){s=score[j];k=j;}if(k>i){score[k]=score[i];score[i]=s;j=index[k];index[k]=index[i];index[i]=j;}cout.width(4); //输出序号,学号和分数cout<<endl<<i+1;cout.width(11);cout<<index[i];cout.width(12);cout.precision(2);cout<<score[i];}cout<<endl;}3.#include<iostream.h>void main(){double x,y;cout<<”Input x:”;cin>>x;if(x<3.0)y=(x-2)*x;elseif(x>=-3.0&&x<=3.0) y=x;else y=x-2;cout<<”x=”<<x<<”,”<<”y=”<<y<<endl;}执行该程序后,显示如下信息:(分别输入3.2,2,-5) Input x:3.2↙输出结果如下:x=3.2,y=1.2Input x:2↙输出结果如下:x=2,y=2Input x:-5↙输出结果如下:x=-5,y=35该程序中使用了if-else if-else语句,用来实现三路分支。

OOP技术:面向对象程序设计期末复习指导

OOP技术:面向对象程序设计期末复习指导

OOP技术:面向对象程序设计期末复习指导面向对象程序设计课程系中央电大开放教育本科计算机科学与技术专业统设必修课程,本课程的期末复习以中央电大下发的资料和网上复习指导为准。

为了加强期末复习,下面市电大给出一套综合练习题,仅作参考。

综合练习题一、单选题1、 C++源程序文件的默认扩展名为( )。

A:cpp B:exe C:obj D:lik2、用new运算符创建一个含10个元素的一维整型数组的正确语句是( )。

A: int *p=new a[10];B: int *p=new float[10];C: int *p=new int[10];D: int *p=new int[10]={1,2,3,4,5}3、假定有“struct BOOK{char title[40]; float price;}; BOOK *book=new BOOK;”,则正确的语句为()。

A: strcpy((*book)->title,”Wang Tao”);B: strcpy(*book.title,”Wang Tao”);C: strcpy(book->title,”Wang Tao”);D: strcpy(book.title,”Wang Tao”);4、假定指针变量p定义为“int *p=new int[30];”,要释放p所指向的动态内存,应使用语句()。

A: delete p;B: delete *p;C: delete &p;D: delete []p;5、关于消息,下列说法中不正确的是()。

A: 发送消息的对象请求服务,接受消息的对象提供服务B: 消息的发送者必须了解消息的接收者如何相应消息C: 在C++中,消息的发送具体体现为对接收消息的对象的某个函数的调用D: 每个对象只能接收某些特定格式的消息6、对于任一个类,用户所能定义的析构函数的个数至多为( )。

A: 0 B: 1 C: 2 D: 任意个7、 do语句能够改写为()语句。

OOP技术:面向对象基础知识题

OOP技术:面向对象基础知识题

OOP技术面向对象基础知识题一、判断题1.面向对象的程序设计是一种以对象为基础,由事件驱动对象执行程序的设计方法。

2.所谓属性是指对象的名字、大小、位置和颜色等特性。

3.方法是对象调用的、用来完成特定操作的特殊子程序。

4.一个工程必须有一个启动对象,默认的启动对象是第一个被创建的窗体。

5.可以在程序设计阶段通过属性窗口,也可以通过程序代码设置对象的属性。

6.如果对象的Enabled属性为False,则对象不对事件做出响应。

*7.除了作为启动对象的窗体外,工程中其他的窗体只有通过加载语句或相关的对象方法对窗体进行加载,并设置可见,窗体才会显示在屏幕上。

*8.在窗体中用Show或Hide方法和在代码中将Visible属性分别设置True 或False 的效果是一样的。

9.窗体的Caption 属性用来设置窗体的标题,在代码中可用这个标题引用该窗体。

*10.当对象具有焦点时,按下键盘上一个键会触发该对象的KeyDown 事件。

*11.当对象具有焦点时,松开键盘上一个键会触发该对象的KeyUp 事件。

*12.当对象具有焦点时,按下、松开键盘上一个键会触发该对象的KeyPress 事件。

该事件先于KeyDown事件而后于KeyUp事件发生。

13.窗体的Enabled属性为False时,窗体上的按钮、文本框等控件仍会对用户的操作做出反应。

*14.执行Form1.Hide 语句,窗体Form1被隐藏,同时Form1的Visible属性自动被置成False。

*15.在一个窗体的代码中不能使用UnLoad语句来卸载本窗体,即一个窗体只能由其他窗体卸载。

16.语句Form1.Move 1000,1200把窗体Form1移动到水平坐标为1000单位,把窗体宽度改成为1200单位。

17.在程序代码中设置对象属性时,若对象名缺省,则隐含指当前窗体对象的属性。

18.Print方法的缺省对象是当前窗体。

19.在程序代码中,可以用赋值语句给对象的属性赋值。

OOP技术:面向对象技术复习思考题

OOP技术:面向对象技术复习思考题

OOP技术:《面向对象技术》复习思考题一.填空题1.在C++中,函数的参数有两种传递方式,它们是值传递和员函数被调用时,该成员函数的2.拷贝构造函数使用3.在公有继承的情况下,基类数据成员在派生类中的访问权限4.用new申请某一个类的动态对象数组时,在该类中必须能够匹配到造函数,否则应用程序会产生一个编译错误。

5.静态数据成员在类外进行初始化,且静态数据成员的一个拷贝被类的所有对象6.设"int a=3,b=4,c=5;",表达式"(a+b)>c&&b!=c"的值是7.在C++中,定义重载函数时,应至少使重载函数的参数个数或参数类型8.动态联编要满足两个条件,它们是9.在C++类中,有一种不能定义对象的类,这样的类只能被继承,称之为10.举出C++中两种用户自定义的数据类型:11.C++中没有字符串类型,字符串是通过都有一个结尾字符12.在C++中,虽然友元提供了类之间数据进行访问的一种方式,但它破坏了面向对象程序设计的13.在C++中,构造派生类对象时,总是先从14.类是用户定义的类型,具有类类型的变量称作15.在5个运算符"*(乘号) 、&&、<=、!、!= "中,优先级由高到低的顺序是16.在C++中,类定义一般用class关键字,不过用struct关键字也可以定义类,它们定义类的区别在于17.静态的成员函数没有隐含的所以,它们只能访问静态的数据成员。

18.与"(!a==0)"等价的C++表达式是19.若a=6,b=4,c=2,则表达式"!(a-b)+c-1&&b+c/2"的值是20.在面向对象的程序设计中,通过现数据隐藏;通过21.在类的定义中,说明为protected的数据成员称为保护成员。

保护数据成员具有双重作用:对于其派生类而言,22.C++signed修饰符。

面向对象课后题答案

面向对象课后题答案
C. 使用内联函数,可以加快程序执行的速度,但会增加程序代码的大小
D. 使用内联函数,可以减小程序代码大小,但使程序执行的速度减慢
【结果分析】
内联函数主要是解决程序的运行效率问题。在程序编译时,编译系统将程序中出现内联函数调用的地方用函数体进行替换,进而减少了程序运行的时间,但会增加程序代码的大小。它是以空间换取时间,因此内联函数适用于功能不太复杂,但要求被频繁调用的函数。
B. 对象实际是功能相对独立的一段程序
C. 各个对象间的数据可以共享是对象的一大优点
D. 在面向对象的程序中,对象之间只能通过消息相互通信
【结果分析】
对象是计算机内存中的一块区域。在对象中,不但存有数据,而且存有代码,使得每个对象在功能上相互之间保持相对独立。对象之间存在各种联系,但它们之间只能通过消息进行通信。
C. C++对C语言进行了一些改进 D. C++和C语言都是面向对象的
【结果分析】
C语言是面向过程的。C++语言是一种经过改进的更为优化的C语言,是一种混合型语言,既面向过程也面向对象。
(6) 面向对象的程序设计将数据结构与( A )放在一起,作为一个相互依存、不可分割的整体来处理。
A. 算法 B. 信息 C. 数据隐藏 D. 数据抽象
四、 判断题
(1) 在高级程序设计语言中,一般用类来实现对象,类是具有相同属性和行为的一组对象的集合,它是创建对象的模板。( √ )
(2) C++语言只支持面向对象技术的抽象性、封装性、继承性等特性,而不支持多态性。( × )
【结果分析】
C++语言不仅支持面向对象技术的抽象性、封装性、继承性等特性,而且支持多态性。

C++面向对象技术复习题汇总(含答案)演示教学

C++面向对象技术复习题汇总(含答案)演示教学

C++面向对象技术复习题汇总(含答案)演示教学面向对象程序设计C++复习资料与答案第一、二、六、七章习题一、选择题1、系统约定C++源程序文件名的缺省的扩展名为()A、bccB、c++C、cppD、vcc2、面向对象的程序设计将数据与()放在一起,作为一个相互依存、不可分割的整体来处理。

A、对数据的操作B、信息C、数据隐藏D、数据抽象3、当一个函数无返回值时,函数的类型应定义为()A、voidB、任意C、intD、无4、对于C++的函数,正确的叙述是:A、函数的定义不能嵌套,但函数的调用可以嵌套B、函数的定义不能嵌套,但函数的调用不能嵌套C、函数的定义和调用都不能嵌套D、函数的定义和调用都可以嵌套5、下列语句中错误的是()A、int *p=new int(10);B、int *p=new int[10]C、int *p=new int;D、int *p=new int[40](0);6、假设已经有定义:const char *const name=”chen”;,下面的语句中正确的是:()A、name[3]=’a’; B、name=”lin”;C、name=new char[5]; D、cout<<name[3];< bdsfid="94" p=""></name[3];<>7、假设已经定义:char *const name=”chen”;, 下面的语句中正确的是:()A、name[3]=’q’; B、name=”lin”;C、name=new char[5]; D、name=new char(‘q’);8、假设已经定义:const char *name=”chen”;, 下面的语句中错误的是:()A、name[3]=’q’; B、name=”lin”;C、name=new char[5]; D、name=new char(‘q’);9、下面的类型声明中正确的是:( )A、int &a[4];B、int &*p;C、int &&qD、int i,*p=&i;10、假设定义了函数模板()templateT max(T x,T y){ return(x>y)?x:y;}并定义了int i;char c;错误的调用语句是:()A、max(i,i)B、max(c,c)C、max((int)c,i);D、max(i,c)11、模板的使用是为了()A、提高代码的可重用性B、提高代码的运行效率C、加强类的封装性D、实现多态性12、设有二个语句:int x[‘a’];cin>>x;则编译器认为()A、说明语句int x[‘a’]错B、二个语句都错C、语句cin>>x 错D、二个语句正确,没有语法错13、设有语句:void f(int a[10],int &x);int y[10],*py=y,n;则对函数f的正确调用语句是( )A、f(py[10],n);B、f(py,n)C、f(*py,&n)D、f(py,&n)14、在C++中实现封装是借助于()A、枚举B、类C、数组D、函数15、对于下面几个函数:(1) void f(int x,float y) {…… }(2) int f(int a,float b){…… }(3) int f(int i,int j){…… }(4) float k(int x){…… }是重载函数。

C-面向对象程序设计习题解答(全)Word版

C-面向对象程序设计习题解答(全)Word版

《C++面向对象程序设计》习题解答陈腊梅目录第一章面向对象程序设计概述.............................................................. 错误!未定义书签。

第二章对C语言的基础扩充................................................................... 错误!未定义书签。

第三章类和对象的初步探讨 ................................................................. 错误!未定义书签。

第四章类和对象的进一步解析.............................................................. 错误!未定义书签。

第五章在对象中使用运算符—运算符重载.......................................... 错误!未定义书签。

第六章继承与派生 (2)第七章多态性与虚函数 (2)第一章面向对象程序设计概述一、选择题二、填空题1、多态性2、成员函数3、抽象4、处理这些数据的操作或处理这些数据的函数5、面向对象分析、面向对象分析、面向对象编程、对象对象测试、面向对象维护第二章对C语言的基础扩充二、程序阅读题1答案a=639,b=78,c=122答案a=5,b=8a=8,b=53答案104答案x=20.6 y=5 z=Ax=216.34 y=5 z=Ax=216.34 y=2 z=Ax=216.34 y=2 z=E5答案ic=11fc=7.82ic=5fc=2.15第三章类和对象的初步探讨一、选择题二、填空题1 数据成员、成员函数2 private 、protected 、public3 指向对象的指针、对象的引用4 属性、行为、属性、行为5 对象、属性和操作这些属性的操作、对外隐藏四、程序改错题#include <iostream>using namespace std;class Clock{//public:void set_clock(void);void show_clock(void);//private:int hour;int minute;int second;};Clock clock;int main( ){clock.set_clock( );clock.show_clock ( );//return 0 ;}void Clock::set_clock(void){cin>>hour;cin>>minute;cin>>second;}void Clock::show_clock(void){cout<<hour<<":"<<minute<<":"<<second<<endl;}第四章类和对象的进一步解析二、填空题1 this2所有成员3友元类、友元函数4 friend5 程序编译、程序结束三、程序阅读题1答案Default constructor called.constructor called.0,06,86,8Destructor called.0,0Destructor called.2答案x!=y3答案Initalizing defaultInitalizing default0 0Destructor is activeDestructor is active4答案n=2,sum=2n=3,sum=5n=5,sum=105答案x=36答案x=1,y=2x=30,y=407答案1 2 3 4 4exit main3 2 1 08答案n=1009答案the student is:Li Huthe teacher is:Wang Ping10答案211答案1035,789.50412答案13答案constructing object:x=1第五章在对象中使用运算符—运算符重载二、程序完善题1(1)A A::operator+(A &b)(2){ A temp;temp.i = i+b.i;return temp; }三、程序阅读题1.答案n=4n=3232.答案c1=10 c2=20c1=100 c2=200c1=11 c2=21c1=100 c2=2003.答案1 2 4 7 11 16第六章派生与继承1 继承2 具体化、抽象3 公有继承、保护继承、私有继承4 子对象5 public(共有的)、protected(保护的)、不可访问6 protected(保护的)、protected(保护的)、不可访问的7 private(私有的)、private(私有的)、不可访问的8 二义性1.C++语言中,既允许单继承,又允许多继承。

面向对象程序设计课后习题答案

面向对象程序设计课后习题答案

面向对象程序设计课后习题答案第一章:面向对象程序设计概述[1_1]什么是面向对象程序设计?面向对象程序设计是一种新型的程序设计范型。

这种范型的主要特征是:程序=对象+消息。

面向对象程序的基本元素是对象,面向对象程序的主要结构特点是:第一:程序一般类的定义和类的使用两部分组成,在主程序中定义各对象并规定它们之间传递消息的规律。

第二:程序中的一切操作都是通过向对象发送消息来实现的,对象接受到消息后,启动有关方法完成相应的操作。

面向对象程序设计方法模拟人类习惯的解题方法,代表了计算机程序设计新颖的思维方式。

这种方法的提出是软件开发方法的一场革命,是目前解决软件开发面临困难的最有希望、最有前途的方法之一。

[1_2]什么是类?什么是对象?对象与类的关系是什么?在面向对象程序设计中,对象是描述其属性的数据以及对这些数据施加的一组操作封装在一起构成的统一体。

对象可以认为是:数据+操作在面向对象程序设计中,类就是具有相同的数据和相同的操作的一组对象的集合,也就是说,类是对具有相同数据结构和相同操作的一类对象的描述。

类和对象之间的关系是抽象和具体的关系。

类是多个对象进行综合抽象的结果,一个对象是类的一个实例。

在面向对象程序设计中,总是先声明类,再类生成对象。

类是建立对象的“摸板”,按照这个摸板所建立的一个个具体的对象,就是类的实际例子,通常称为实例。

[1_3]现实世界中的对象有哪些特征?请举例说明。

对象是现实世界中的一个实体,其具有以下一些特征:每一个对象必须有一个名字以区别于其他对象。

需要用属性来描述它的某些特性。

有一组操作,每一个操作决定了对象的一种行为。

对象的操作可以分为两类:一类是自身所承受的操作,一类是施加于其他对象的操作。

例如:雇员刘名是一个对象对象名:刘名对象的属性:年龄:36 生日:工资:2000 部门:人事部对象的操作:吃饭开车[1_4]什么是消息?消息具有什么性质?在面向对象程序设计中,一个对象向另一个对象发出的请求被称为“消息”。

面向对象分析与设计习题及部分答案

面向对象分析与设计习题及部分答案

《面向对象分析与设计》习题及部分答案第一章 概论1.什么是面向对象方法?面向对象的基本原则主要有哪些?答:面向对象方法是一种运用对象、类、继承、封装、聚合、关联、消息、多态性等概念来构造系统的软件开发方法。

面向对象方法的解决问题的思路是从现实世界中的客观对象(如人和事物)入手,尽量运用人类的自然思维方式来构造软件系统,这与传统的结构化方法从功能入手和信息工程化方法从信息入手是不一样的。

面向对象的基本思想主要有:1)从现实世界中客观存在的事物出发来建立软件系统,强调直接以问题域(现实世界)中的事物为中心来思考问题、认识问题,并根据这些事物的本质特征,把它们抽象地表示为系统中的对象,作为系统的基本构成单位。

这可以使系统直接映射问题域,保持问题域中事物及其相互关系的本来面貌(对象)2)用对象的属性表示事物的性质;用对象的操作表示事物的行为。

(属性与操作)3)对象的属性与操作结合为一体,成为一个独立的、不可分的实体,对外屏蔽其内部细节。

(对象的封装)4)对事物进行分类。

把具有相同属性和相同操作的对象归为一类,类是这些对象的抽象描述,每个对象是它的类的一个实例。

(分类)5)复杂的对象可以用简单的对象作为其构成部分。

(聚合)6)通过在不同程度上运用抽象的原则,可以得到较一般的类和较特殊的类。

特殊类继承一般类的属性与操作,从而简化系统的构造过程及其文档。

(继承)7)对象之间通过消息进行通讯,以实现对象之间的动态联系。

(消息)8)通过关联表示类(一组对象)之间的静态关系。

(关联)2.与传统开发方法比,面向对象方法有什么优点?答:面向对象方法的解决问题的思路是从现实世界中的客观对象(如人和事物)入手,尽量运用人类的自然思维方式来构造软件系统,这与传统的结构化方法从功能入手和信息工程化方法从信息入手是不一样的。

与传统方法相比,面向对象的方法主要优点有:1)从认识论的角度可以看出,面向对象方法改变了人们认识世界的方式;2)语言的发展——鸿沟变窄;3)面向对象方法使得从问题域到计算机间的鸿沟变窄;4)面向对象方法有助于软件的维护与复用;(1)把易变的数据结构和部分功能封装在对象内并加以隐藏,一是保证了对象行为的可靠性;二是对它们的修改并不会影响其他的对象,有利于维护,对需求变化有较强的适应性。

《面向对象技术(本)》课程第一阶段练习题答案

《面向对象技术(本)》课程第一阶段练习题答案

《面向对象技术(本)》课程第一阶段练习题答案一.填充题答案:1.java, class2.Application, Applet3.编写源程序,编译源程序,解释运行字节码文件4.成员变量,成员方法5.javac MyPro.java, java MyPro6. long var=123456789L;7. false8. 23二.选择题答案: 1. C 2. B 3. D 4. C 5. A6. C7. B8. A9. A 10. A三.简答题答案:1.Java程序设计语言是新一代语言的代表,它强调了面向对象的特性,可以被用来开发范围广泛的软件,它具有支持图形化的用户界面、网络以及数据库连接等复杂的功能,Java 语言的主要的特点有:(1)易于学习Java语言很简单,它的语法非常类似于C++,但是它摒弃了C++许多低级、困难、容易混淆、容易出错或不经常被使用的功能。

(2)高效率的执行方式用Java语言编辑的源程序的执行方法是采用先经过编译器编译、再利用解释器解释的方式来运行的。

它综合了解释性语言与编译语言的众多优点,使其执行效率较以往的程序设计语言有了大幅度的提高。

(3)与平台无关性Java源程序经过编译器编译,会被转换成一种我们将它称之为“字节码(byte_codes)”的目标程序,可以跨平台运行。

(4)分布式分布式主要是指数据分布和操作分布两层意思,数据分布是指数据可以分散在网络中不同的主机上,操作分布是指把一个任务分散在不同的主机上进行处理。

Java从诞生起就与网络联系在一起,它强调网络特性,内置TCP/IP,HTTP,FTP协议类库,便于开发网上应用系统。

(5)安全性Java2平台采用了域管理方式的安全模型,无论是本地代码还是远程代码都可以通过配置的策略,设定可访问的资源域,使得Java成为安全的编程语言。

(6)多线程Java的多线程机制使应用程序中的线程能够并发执行,保证了对共享数据的正确操作,可以分别用不同的线程完成特定的行为,很容易在网络上实现实时交互行为。

第十章习题

第十章习题

习题第十章面向对象的程序设计一、选择题1.以下关于visual foxpro类的说法,不正确的是()。

A.类具有继承性和封装性B.用户必须给基类定义属性,否则出错C.子类一定具有父类的全部属性D.用户可以按照已有的类派生出多个子类2.下面关于“类”的描述,错误的是()。

A.一个类包含了相似的有关对象的特征和行为方法B.类只是实例对象的抽象C.类可以按所定义的属性、事件和方法进行实际的行为操作D.类并不进行任何行为操作,它仅仅表明该怎样做3.类是一组具有相同属性和相同操作的对象的集合,类之间共享属性和操作的机制称为()。

A.多态性B.动态绑定C.静态绑定D.继承4.命令按钮组是()。

A.控件B.容器C.控件类对象D.容器类对象5.下列关于面向对象程序设计(OOP)的叙述,错误的是()。

A. OOP的中心工作是程序代码的编写B. OOP以对象及其数据结构为中心展开工作C. OOP以“方法”表现处理事物的过程。

D. OOP以“对象”表示各种事物,以“类”表示对象的抽象。

6.下列基类中是容器类的是()。

A.表单B.命令按钮C.列表框D.单选按钮7.在VISUAL FOXPRO系统中,以下关于事件的叙述错误的是()。

A.事件是每个对象可以识别和相应的某些行为和动作B.事件不能适用于多种控件C.事件是通过用户的操作性为引发的D.当事件发生时,将执行包含在事件过程中的全部代码8.下面关于属性、方法和事件的叙述中,错误的是()。

A.属性用于描述对象的状态,方法用于表示对象的行为B.基于同一个类产生的两个对象可以分别设置自己的属性值C.在新建一个表但是,可以添加新的属性、方法和事件D.事件代码也可以像方法一样被显示调用9.任何对象都有自己的属性,下列关于属性的叙述中,正确的是()。

A.属性是对象所具有的固有特征,通常用各种类型的数据来表示B.属性是对象所具有的内部特征,通常用各种类型的数据来表示C.属性是对象所具有的外部特征,通常用各种类型的数据来表示D.属性是对象所具有的固有方法,通常用各种程序代码来表示10.下列说法中错误的是()。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

OOP技术:习题第1章习题1. 什么是面向对象技术?2. 面向对象与面向过程程序设计有什么不同?3. 面向对象技术有哪些优点?4. 面向对象技术中的封装性有何优缺点?如何克服这些缺点?5. 为什么要应用继承机制?6. C++对多态性的支持体现在哪些方面?7. 目前常用的面向对象程序设计语言有何异同?8. 什么是.NET?第2章习题1. 写出下面程序的运行结果。

#include <iostream.h>void main(){int* a;int* &p=a;int b=10;p=&b;cout<<*a<<endl;cout<<*p<<endl;}2. 写出下面程序的运行结果。

#include <iostream.h>void main(){int iarray[10]={0,2,4,6,8,10,12,14,16,18};int sum=0;int* iptr=iarray;for(int i=0;i<10;i++){sum+=*iptr;iptr++;}cout<<"sum is"<<sum<<endl;}3. 写出下面程序的运行结果。

#include <iostream.h>int m=8;int add3(int x,int y=7,int z=m){ return x+y+z; }void main(){int a=1,b=2,c=3;cout<<add3(a,b)<<endl;cout<<add3(10)<<endl;}4. 编程求所有的水仙花数。

如果一个三位数的个位数、十位数和百位数的立方和等于该数本身,则称该数为水仙花数。

5. 编程求1000以内所有素数。

6. 编写一个可以打印任何一年日历的程序。

7. 在10000以内验证哥德巴赫猜想之“1+1”命题:任意大的偶数,都可以表示为两个素数之和。

8. 编写一个函数,用冒泡法对输入的十个整数从小到大排序。

9. 编写一个函数,输入一个十六进制数,输出相应的十进制数。

10. 将给定的一个二维数组(3×3)转置,即行列互换。

11. 用非递归的函数调用方式求fibonaci数列第n项。

fibonaci数列形如:0,1,1,2,3,5,8,13,┄其通项为:F0=0;F1=1;┄;F n=F n-1+F n-2。

12. 编写重载函数max,分别返回字符数组、int数组、long数组、float数组、double 数组和字符串数组的最大元素。

第3章习题1. 类定义由哪些部分组成?在定义和使用时要注意什么问题?2. 说明一个类的公有成员、保护成员和私有成员的区别。

3. 何时执行类构造函数及析构函数?若该对象作为类的成员,何时执行其构造函数和析构函数?4. 创建一个Employee类,该类中有字符数组,表示姓名、街道地址、市、省和邮政编码。

其功能有修改姓名、显示数据信息。

要求其功能函数的原型放在类定义中,构造函数初始化每个成员,显示信息函数要求把对象中的完整信息打印出来。

其中数据成员为保护的,函数为公有的。

5. 修改第4题中的类,将姓名构成Name类,其名和姓在该类中为保护数据成员,其构造函数为接受一个指向完整姓名字符串的指针。

该类可显示姓名。

然后将Employee类中的姓名成员(字符数组)修改为Name类对象。

6. 改正下列程序中的错误,并说明理由。

程序1:include <iostrea.h>;class Student{publicvoid Student()void display(){cin<<'number:'<<number<<endlcout<<name:<<name<<endl;cout<<score:<<score<<endl;private:int number,char* name,float score;}程序2:include <iostream.h>;class example(){private:int date;static int countpublic;void example(int y=10)(date=y;)(cout<<"date="<<date;return count;)}7. 写出下面程序的运行结果。

注意:构造函数和析构函数的执行次序、构造函数的初始化表。

#include <iostream.h>class Ex{public:Ex(int x,char c='c');~Ex(){cout<<'B'<<endl;}void outdata(void){cout<<ch<<da<<endl;}private:int da;char ch;};void main(){Ex x(3,'a'),y(1);Ex z[2]={Ex(10,'a'),Ex(1,'d')};x.outdata();y.outdata();z[0].outdata();}Ex::Ex(int x,char c):da(x),ch(c) {cout<<'A'<<endl;}8. 写出下面程序的运行结果。

#include <iostream.h>#include <string.h>#include <stdio.h>class Ex{public:Ex(const char* s){len=strlen(s);p=new char[len+1];strcpy(p,s);}Ex(){p=new char[8];cout<<"****"<<endl;}Ex(const Ex& st){len=strlen(st.p);p=new char[len+1];strcpy(p,st.p);}~Ex(){delete p;}void outdata(void){printf("%x:%d ,%x:%s\n",&len,len,&p,p);}private:int len;char* p;};void main(){Ex x("first");Ex y=x,z;x.outdata();y.outdata();}9. 写出下面程序的运行结果。

#include <iostream.h>class MyClass{public:MyClass();MyClass(int);void Display();~MyClass();protected:int number;};MyClass::MyClass(){cout<<"Constructing normally\n";}MyClass::MyClass(int m){number=m;cout<<"Constructing with a number:"<<number<<endl;}void MyClass::Display(){cout<<"Display a number:"<<number<<endl;}MyClass::~MyClass(){cout<<"Destructing\n";}void main(){MyClass obj1;MyClass obj2(10);obj1.Display();obj2.Display();}10. 什么是静态数据成员?它有何特点?11. 编写一个类,声明一个数据成员和一个静态数据成员。

其构造函数初始化数据成员,并把静态数据成员加1,其析构函数把静态数据成员减1。

(1)编写一个应用程序,创建该类的3个对象,然后显示其数据成员和静态数据成员,再析构每个对象,并显示它们对静态数据成员的影响。

(2)修改该类,增加静态成员函数并访问静态数据成员,并声明静态数据成员为保护成员。

体会静态成员函数的使用,静态成员之间与非静态成员之间互访问题。

12. 假设有两个类Student和Score,使用时,怎样允许Score成员访问Student中的私有成员和保护成员?13. 为什么要定义友元?友元有哪几种类型?14.改正下面代码的错误。

#include <iostream.h>class Animal;void SetValue(Animal&,int);void SetValue(Animal&,int,int);class Animal{public:friend void setValue(Animal&,int);protected:int itsWeight;int itsAge;};void SetValue(Animal& ta,int tw){ta.itsWeight=tw;}void SetValue(Animal& ta,int tw,int tn){ta.itsWeught=tw;ta.itsAge=tn;}void main(){Animal peppy;SetValue(peppy,5);SetValue(peppy,7,9);}将第14题程序中的友元改成普通函数,为此增加访问类中保护数据的成员函数。

第4章习题1. 什么是继承?它在软件设计中有什么作用?2. 比较类的三种继承方式之间的差别。

3. 如果派生类B已经重新定义了基类A的一个成员函数fn1(),没有定义重载成员函数fn2(),怎样调用基类的成员函数fn1()、fn2()?4. 写出运行结果,分析程序中的访问权限,并回答所列问题。

#include <iostream.h>class A{public:void f1();A(){cout<<"A Constructor"<<endl;i1=10;j1=11;cout<<"i1="<<i1<<"j1="<<j1<<endl;}~A(){cout<<"A Destructor"<<endl;}protected:int j1;private:int i1;};class B:public A{public:void f2();B(){cout<<"B Constructor"<<endl;i2=20;j2=21;cout<<"i2="<<i2<<"j2="<<j2<<endl;}~B(){cout<<"B Destructor"<<endl;} protected:int j2;private:int i2;};class C:public B{public:void f3();C(){cout<<"C Constructor"<<endl;i3=30;j3=31;cout<<"i3="<<i3<<"j3="<<j3<<endl;}~C(){cout<<"C Destructor"<<endl;} protected:int j3;private:int i3;};void main(){A a;B b;C c;}(1)派生类B中成员函数f2()能否访问基类A中的成员f1()、i1和j1?(2)派生类B的对象b能否访问基类A中的成员f1()、i1和j1?(3)派生类C中成员函数 f3()能否访问直接基类 B中的成员 f2()、j2和i2?能否访问间接基类A中的成员f1()、j1和i1?(4)派生类C的对象c能否访问直接基类B中的成员f2()、i2和j2呢?能否访问间接基类A中的成员f1()、j1和i1?(5)根据上述结果总结继承中构造函数和析构函数的调用顺序。

相关文档
最新文档