面向对象程序设计教程答案
C++面向对象程序设计课后题答案
面向对象程序设计课后题答案第二章C++概述【2.6】D【2.7】D【2.8】A【2.9】A【2.10】B【2.11】A【2.12】C【2.13】B【2.14】D【2.15】C【2.16】D【2.17】C【2.18】程序的运行结果:101【2.19】程序的运行结果:10 10【2.20】程序的运行结果:1020【2.22】编写一个C++风格的程序,用动态分配空间的方法计算Fibonacci数列的前20项并存储到动态分配的空间中。
#include <iostream.h>int main(){int *p,i;p[0]=1;p[1]=1;for(i=2;i<20;i++){p[i]=p[i-1]+p[i-2];}for(i=0;i<20;i++){cout<<p[i]<<endl;}return 0;}【2.23】编写一个C++风格的程序,建立一个被称为sroot()的函数,返回其参数的二次方根。
重载sroot()3次,让它返回整数、长整数与双精度数的二次方根。
#include <iostream.h>#include<math.h>double sroot(int m){return sqrt(m);}double sroot(long m){return sqrt(m);}double sroot(double m){return sqrt(m);}int main()cout<<"sroot(145)="<<sroot(145)<<endl;cout<<"sroot(123456)="<<sroot(123456)<<endl;cout<<"sroot(1.44)="<<sroot(1.44)<<endl;return 0;}【2.24】编写一个C++风格的程序,解决百钱问题:将一元人民币兑换成1、2、5分的硬币,有多少种换法?#include <iostream.h>int main(){int k=0;for(int i=0;i<=20;i++){for(int j=0;j<=50;j++){if(100-5*i-2*j>=0){k++;}}}cout<<"将一元人民币兑换成1、2、5分的硬币,共有"<<k<<"种换法"<<endl;return 0;}【2.25】编写一个C++风格的程序,输入两个整数,将它们按由小到大的顺序输出。
面向对象程序设计教程 答案
面向对象程序设计教程答案面向对象程序设计教程
第一章:介绍面向对象程序设计
⑴面向对象程序设计的概念
⑵面向对象程序设计的优势
⑶面向对象程序设计的基本原则
第二章:面向对象的基本概念
⑴类和对象的概念
⑵属性和方法的定义
⑶封装、继承和多态的概念
第三章:类的设计与实现
⑴类的设计原则
⑵类的成员变量和成员函数的设计
⑶类的构造函数和析构函数的设计
⑷类的访问控制和封装性的实现
第四章:继承与多态
⑴继承的概念和用法
⑵单继承和多继承的区别
⑶虚函数的定义和使用
⑷纯虚函数和抽象类的概念
第五章:面向对象的设计模式
⑴设计模式的概念和分类
⑵单例模式的实现
⑶工厂模式的实现
⑷观察者模式的实现
第六章:面向对象程序设计的实例
⑴车辆管理系统的设计与实现
⑵学生信息管理系统的设计与实现
⑶游戏角色的设计与实现
附件:
⒈示例代码
⒉ UML图
法律名词及注释:
⒈版权:根据国际公约,对作者创作的作品(包括文学、艺术、音乐、软件等)的独有权益进行法律保护。
⒉商标:商标是指为了区别商品或服务而在商品上、包装上、容器上或者商品的商业文件上使用的特定标识的任何符号。
⒊专利:专利是为了推动技术创新,提供创新者在一定时期内对其发明进行独占权利的一种法律制度。
⒋许可证:许可证是指一方在法律许可范围内允许他人使用自己的某种权利的文件。
面向对象程序设计教程 答案
面向对象程序设计教程答案面向对象程序设计教程第1章引言1.1 背景1.1.1 传统的结构化程序设计方法1.1.2 面向对象的程序设计方法1.2 目标1.3 本教程的组织结构第2章面向对象的基本概念2.1 类和对象2.1.1 类的定义2.1.2 对象的创建与使用2.2 封装和信息隐藏2.2.1 封装的概念2.2.2 信息隐藏的重要性2.3 继承和多态2.3.1 继承的概念与用法 2.3.2 多态的概念与用法 2.4 抽象和接口2.4.1 抽象的概念与用法 2.4.2 接口的概念与用法第3章面向对象的设计原则3.1 单一职责原则3.2 开放-封闭原则3.3 里氏替换原则3.4 依赖倒置原则3.5 接口隔离原则3.6 迪米特法则第4章面向对象的分析与设计 4.1 需求分析4.1.1 确定需求4.1.2 分析需求4.2 类的设计4.2.1 识别类的责任4.2.2 定义类的属性和行为 4.3 协作关系的设计4.3.1 关联关系4.3.2 依赖关系4.3.3 聚合关系4.3.4 组合关系4.3.5 继承关系第5章面向对象的编程语言5.1 Java5.2 C++5.3 Python5.4 Ruby第6章实例分析:学绩管理系统 6.1 需求分析6.2 类的设计6.3 协作关系的设计6.4 实现与测试第7章总结本文档涉及附件:无本文所涉及的法律名词及注释:1:封装:将数据和对数据的操作封装在一个类中,外部无法直接访问和修改内部数据,只能通过类提供的接口访问和修改。
2:信息隐藏:对于类的用户来说,只需要知道如何使用类的接口,而不需要知道类的实现细节。
3:继承:一个类可以从另一个类继承属性和方法,继承可以提高代码的复用性和可维护性。
4:多态:同一个方法可以根据不同的对象调用不同的实现,提高代码的灵活性和可扩展性。
5:抽象:将一组具有相似属性和行为的对象抽象成一个类,可以减少代码重复。
6:接口:描述类的行为,定义类应该实现的方法。
C++面向对象程序设计教程课后习题答案
tem = a[i]; a[i] = a[j]; a[j] = tem;
}
}
……
整理课件
9
*5.编一个程序,用同一个函数名对n个数据进行从小到大排序,数据类型可
以是整型、单精度实型、双精度实型,用重载函数实现。
参考程序:
……
void Sort(float a[], int n)
// 对a[0]...a[n-1]进行排序
// 定义变量
for (i = 0; i < n- 1; i++)
for (j = i + 1; j < n; j++)
if (a[i] > a[j])
{
// a[i]比a[j]更大
tem = a[i]; a[i] = a[j]; a[j] = tem;
}
}
……
整理课件
11
*5.编一个程序,用同一个函数名对n个数据进行从小到大排序,数据类型可
double c[] = {1.2, 3.1, 2.6, 5.8, 6.8, 9.8, 0.8, 6.2};// 定义c
int i, n = 8;
// 定义变量
Sort(a, n); cout << "a:"; for (i = 0; i < n; i++)
cout << a[i] << " "; cout << endl;
Fun(a);
// 调用Fun()
return 0;
// 返回值0, 返回操作系统
}
该程序执行后输出的结果是 。
A)1
面向对象程序设计习题及答案
面向对象程序设计一、选择填空1. 关于C + +与C语言的关系描述中,(D)是错误的。
(A)C语言是C + +的一个子集 (B) C语言与C++是兼容的(C) C++对C语言进行了一些改进(D) C++和C语言都是面向对象的2. 下面关于对象概念的描述中,(B)是错误的。
(A )对象就是C语言的结构变量(B)对象代表着正在创建的系统中的一个实体(C)对象是一个状态的操作(或方法)的封装体(D)对象之间的信息传递是通过消息进行的3. 下面关于类概念的描述中,(D)是错误的。
(A )类是抽象数据类型的实现(B )类是具有共同行为的若干对象的统一描述体(C)类是创建对象的样板(D)类就是C语言的结构类型4. 按照标识符的要求,(A )符号不能组成标识符。
(A )连接符 (B)下划线 (C)大小写字母 (D)数字字符5. 下列符号中,(C)不可作为分隔符。
(A), (B) : (C)? ( D);6. 在16位机中,int型字宽为(A)字节。
(A ) 2 ( B) 4 ( C) 6 (D) 87. 类型修饰符unsigned修饰(D)类型是错误的。
(A)char ( B) int (C) long int (D) float& 对于int *pa[5];的描述,(D)是正确的。
(A)pa是一个指向数组的指针,所指向的数组是5个int型元素(B)pa是一个指向某数组中第5个元素的指针,该元素是int变量(C)pa[5]表示某个数组的第5个元素(D)pa是一个具有5个元素的指针数组,每个元素是一个int型指针。
9. 下列关于指针的运算中,(D)是非法的。
(A)两个指针在一定条件下,可以进行相等或不等的运算。
(B)可以有一个空指针赋值给某个指针。
(C)一个指针可以加上一个整数。
(D)两个指针在一定条件下,可以相加。
10. 指针可以用来表示数组元素,下列表示中( A )是错误的。
已知:int a[3][7];(A)*(a+1)[5] ( B) *(*a+3) (C) *(*(a+1)) (D) *(&a[0][0]+2)11. 下列表示引用的方法中,(A )是正确的。
李爱华、程磊_面向对象程序设计课后答案(完整版)
第二章2-4#include <iostream>using namespace std;Add(int a,int b);int main(){int x,y,sum;cout<<"please input x and y:"; cin>>x>>y;sum = add(x,y);cout <<x<<"+"<<y<<"="<<sum<<endl;}Add(int a,int b){return a+b;}2-5(1)this is a C++ program.(2)x= y=10 z=Ax= y=10 z=Ax= y=2 z=Ax= y=2 z=E (3)x y z500 1000 0500 1500 1500500 200 15002-6#include <iostream> using namespace std;int main(){int *p,*init;int countp=0;int countn=0; p = new int[20];init = p;for(int i=0;i<20;i++) {cin>>*p; p++;}p = p-20;for( i=0;i<20;i++){if(*p>0) countp++;if(*p<0) countn++; cout<<*p<<" "; p++;}cout«"正数有:"vvcountp«endl;cout«"负数有:"<<countn«endl; p =init;delete[] p;return 0;}2-7 不做要求#include <iostream>rint ();cout«"最小成绩:"<<endl;st[min].Print ();return 0;}4-11#include <iostream>#include <string>using namespace std;class Book{char *name;char*author;int sale;public:Book(){ name = '\0';author = '\0';sale = -1;}Book(char* a ,char* b,int c){name = new char[strlen(a)+1];strcpy(name,a);author = newchar[strlen(b)+1];strcpy(author,b);sale = c;}void print(){cout<<"autor "<<author<<endl;cout<<"name "<<name<<endl;cout<<"price "<<sale<<endl;}~Book(){if(!name ) delete[] name;if(!author)delete[] author;}};int main(){Book b1("c++","li ai hua",12);Book b2;return 0; }第五章5-8 改错题答案不唯一(1) class DC { int x; public: DC(){x =100;}};(2)编译无错,但逻辑错误,可改为:class BC{protected: int x;public:BC(int i=0){x = i}};class DC:private BC{public:DC(int i):BC(i){} };⑶将DC构造函数改为:DC(int i):BC(i){y = 0;} 5-9 (1) base class(2) (10,5) (3,9-18,33) (13,19) (13,19-18,33) (13,19)5-10#include <iostream> using namespace std;class Shape{int x,y; public:Shape(int ix,int iy){x = ix; y = iy;}virtual void show(){cout<<"pos: "<<x<<' '<<y<<endl;} };class Circle :public Shape{int radius;public:Circle(int ix,int iy,int r):Shape(ix,iy),radius(r){}void show() {Shape::show (); cout<<"circle: "<<radius<<endl;} };class Rect :public Shape{int width,higth;public:Rect(int ix,int iy,int iw,intih):Shape(ix,iy),width(iw),higth(ih){} void show() {Shape::show ();cout<<"width and higth: "<<width<<' '<<higth<<endl;}};int main()Shape s1(1,1);Rect r1(2,2,8,8);Circle c1(3,3,9);();();return 0;}5-11#include<> class vehicle show (); tru1. show ();}第六章6-4d=3D::fun();6-5C::print(),cinfo=2C::print(),cinfo=2D::print(),dinfo=4B类不能定义对象,否则编译通不过,因为B未定义基类A中的虚函数prin t(),它也是个虚基类。
C 面向对象程序设计课后答案(谭浩强)
C++面向对象程序设计课后答案(1-4章)第一章:面向对象程序设计概述[1_1]什么是面向对象程序设计?面向对象程序设计是一种新型的程序设计范型。
这种范型的主要特征是:程序=对象+消息。
面向对象程序的基本元素是对象,面向对象程序的主要结构特点是:第一:程序一般由类的定义和类的使用两部分组成,在主程序中定义各对象并规定它们之间传递消息的规律。
第二:程序中的一切操作都是通过向对象发送消息来实现的,对象接受到消息后,启动有关方法完成相应的操作。
面向对象程序设计方法模拟人类习惯的解题方法,代表了计算机程序设计新颖的思维方式。
这种方法的提出是软件开发方法的一场革命,是目前解决软件开发面临困难的最有希望、最有前途的方法之一。
[1_2]什么是类?什么是对象?对象与类的关系是什么?在面向对象程序设计中,对象是描述其属性的数据以及对这些数据施加的一组操作封装在一起构成的统一体。
对象可以认为是:数据+操作在面向对象程序设计中,类就是具有相同的数据和相同的操作的一组对象的集合,也就是说,类是对具有相同数据结构和相同操作的一类对象的描述。
类和对象之间的关系是抽象和具体的关系。
类是多个对象进行综合抽象的结果,一个对象是类的一个实例。
在面向对象程序设计中,总是先声明类,再由类生成对象。
类是建立对象的“摸板”,按照这个摸板所建立的一个个具体的对象,就是类的实际例子,通常称为实例。
[1_3]现实世界中的对象有哪些特征?请举例说明。
对象是现实世界中的一个实体,其具有以下一些特征:(1)每一个对象必须有一个名字以区别于其他对象。
(2)需要用属性来描述它的某些特性。
(3)有一组操作,每一个操作决定了对象的一种行为。
(4)对象的操作可以分为两类:一类是自身所承受的操作,一类是施加于其他对象的操作。
例如:雇员刘名是一个对象对象名:刘名对象的属性:年龄:36 生日:1966.10.1 工资:2000 部门:人事部对象的操作:吃饭开车[1_4]什么是消息?消息具有什么性质?在面向对象程序设计中,一个对象向另一个对象发出的请求被称为“消息”。
C++面向对象程序设计教程(第3版)—-陈维兴,林小茶课后习题答案
C++面向对象程序设计教程课后题答案1.1?? 什么是面向对象程序设计面向对象程序设计是一种新的程序设计范型.这种范型的主要特征是:程序=对象+消息面向对象程序的基本元素是对象。
主要结构特点是:第一,?? 程序一般由类的定义和类的使用两部分组成;第二,?? 程序中的一切操作都是通过向对象发送消息来实现的。
1.2?? 什么是对象什么是类对象与类之间的关系是什么对象是描述其属性的数据以及对这些数据施加的一组操作封装在一起构成的统一体。
类就是具有相同的数据和相同的操作的一组对象的集合,也就是说,类是对具有相同数据结构和相同操作的一类对象的描述。
类和对象之间的关系是抽象和具体的关系。
类是多个对象进行综合抽象的结果,一个对象是类的一个实例。
1.3?? 现实世界中的对象有哪些特征?请举例说明。
现实世界中的对象具有以下特征:1)???????? 每一个对象必须有一个名字以区别于其他对象;2)???????? 用属性来描述对象的某些特征;3)???????? 有一组操作,每组操作决定对象的一种行为;4)???????? 对象的行为可以分为两类:一类是作用于自身的行为,另一类是作用于其他对象的行为。
例如一个教师是一个对象。
每个教师对象有自己的名字来和别的教师区别。
教师具有编号,姓名,年龄,职称,专业等属性。
教师拥有走路,吃饭,授课等行为操作。
走路,吃饭是作用于自身的行为,授课是作用于其他对象的行为。
1.4?? 什么是消息?消息具有什么性质?一个对象向另一个对象发出的请求成为“消息”。
消息具有以下3个性质:1)???????? 同一个对象可以接收不同形式的多个消息,做出不同的相应;2)???????? 相同形式的消息可以传递给不同的对象,所做出的响应可以是不同的;3)???????? 对消息的响应并不是必须的,对象可以响应消息,也可以不响应。
1.5?? 什么是抽象和封装?请举例说明。
抽象是将有关事物的共性归纳、集中的过程。
(完整版)《面向对象程序设计》答案
实验一熟悉VC++IDE开发环境一、实验目的1、熟悉VC++6.0集成开发环境,熟练掌握VC++6.0项目工作区、各种编辑器、菜单栏和工具栏的使用。
2、掌握如何编辑、编译、连接和运行一个C++程序。
3、通过运行简单的C++程序,初步了解C++源程序的结构和特点。
二、实验要求1、分析下列程序运行的结果。
程序一:#include <iostream.h>int add(int x,int y=8);void main(){ int x=4;cout<<add(x)<<",";cout<<add(x,add(add(x,add(x))))<<endl;}int add(int x,int y){ return x+y;}//12,28程序二:#include <iostream.h>void main(){ int *p,i;i=5;p=&i;i=*p+10;cout<<"i="<<i<<endl;}//i=15程序三:#include <iostream.h>void main(void){ int i=10;int &r=i;r++;cout<<"i="<<i<<", r="<<r<<'\n';i=88;cout<<"i="<<i<<", r="<<r<<'\n';}//i=11,r=11i=88,r=88程序四:#include <iostream.h>int f(int i){ static int k=1;for(;i>0;i--)k +=i;return k;}void main(){ int i;for(i=0;i<5;i++)cout<<f(i)<<" ";}// 1 2 5 11 21程序五:#include <iostream.h>void func();int n=1;void main(){ static int a;int b= -9;cout <<"a:"<<a<<" b:"<<b<<" n:" <<n<<endl;b+=4;func();cout <<"a:"<<a<<" b:"<<b<<" n:"<<n<<endl;n+=10;func();}void func(){ static int a=2; int b=5;a+=2;n+=12;b+=5;cout <<"a:" <<a<<" b:" <<b<<" n:" <<n <<endl;}// a:0 b:-9 n:1a:4 b:10 n:13a:0 b:-5 n:13a:6 b:10 n:35实验二C++对C的扩充一、实验目的1、了解在面向对象程序设计过程中C++对C功能的扩充与增强,并善于在编写程序的过程中应用这些新功能。
面向对象程序设计教程-答案
面向对象程序设计教程-答案(共19页)--本页仅作为文档封面,使用时请直接删除即可----内页可以根据需求调整合适字体及大小--面向对象程序设计教程(C++语言描述)题解与课程设计指导第1章面向对象程序设计概论一、名词解释抽象封装消息【问题解答】面向对象方法中的抽象是指对具体问题(对象)进行概括,抽出一类对象的公共性质并加以描述的过程。
面向对象方法中的封装就是把抽象出来的对象的属性和行为结合成一个独立的单位,并尽可能隐蔽对象的内部细节。
消息是面向对象程序设计用来描述对象之间通信的机制。
一个消息就是一个对象要求另一个对象实施某种操作的一个请求。
二、填空题(1)目前有面向过程的结构化程序设计方法和面向对象的程序设计方法两种重要的程序设计方法。
(2)结构化程序设计方法中的模块由顺序、选择和循环3种基本结构组成。
(3)在结构化程序设计方法中,程序可表示为程序=数据结构+算法;而面向对象的程序设计方法,程序可表示为程序=对象+消息。
(4)结构化程序设计方法中的基本模块是过程;而面向对象程序设计方法中的基本模块是类。
(5)面向对象程序设计方法具有抽象性、封装性、继承性和多态性等特点。
三、选择题(至少选一个,可以多选)(1)面向对象程序设计着重于( B )的设计。
A. 对象B. 类C. 算法D. 数据(2)面向对象程序设计中,把对象的属性和行为组织在同一个模块内的机制叫做( C )。
A. 抽象B. 继承C. 封装D. 多态(3)在面向对象程序设计中,类通过( D )与外界发生关系。
A. 对象B. 类C. 消息D. 接口(4)面向对象程序设计中,对象与对象之间的通信机制是( C )。
A. 对象B. 类C. 消息D. 接口(5)关于C++与C语言的关系的描述中,( D )是错误的。
A. C语言是C++的一个子集B. C语言与C++是兼容的C. C++对C语言进行了一些改进D. C++和C语言都是面向对象的【结果分析】C语言是面向过程的。
面向对象程序设计教程 答案(2023最新版)
面向对象程序设计教程答案面向对象程序设计教程⒈简介⑴程序设计概述⑵面向对象编程概述⑶面向对象编程的优势⒉类和对象⑴类的定义⑵对象的创建和使用⑶类的继承和多态⑷抽象类和接口⒊封装和继承⑴封装的概念和作用⑵封装的实现方式⑶继承的概念和作用⑷继承的实现方式⒋多态和接口⑴多态的概念和作用⑵多态的实现方式⑶接口的概念和作用⑷接口的实现方式⒌组合和聚合⑴组合的概念和作用⑵组合的实现方式⑶聚合的概念和作用⑷聚合的实现方式⒍类和对象的关系⑴关联关系⑵依赖关系⑶简介关系⑷实现关系⒎对象的生命周期和内存管理⑴对象的创建和销毁⑵内存管理的概念和作用⑶垃圾回收机制⑷内存泄漏和内存溢出的概念⒏设计模式⑴设计模式的概念和作用⑵常见的设计模式⑶创建型模式⑷结构型模式⑸行为型模式⒐异常处理⑴异常的概念和作用⑵异常处理的机制⑶异常处理的实现方式⒑文件操作和输入输出⑴文件操作的概念和作用⑵文件读写的实现方式⑶输入输出流的概念和作用⑷输入输出流的实现方式1⒈线程和并发编程1⑴线程的概念和作用1⑵线程的创建和使用1⑶线程同步和互斥1⑷并发编程的概念和作用1⒉软件测试和调试1⑴软件测试的概念和作用1⑵单元测试和集成测试1⑶调试的概念和作用1⑷常见的调试工具和技巧1⒊版本控制和项目管理1⑴版本控制的概念和作用1⑵常见的版本控制工具1⑶项目管理的概念和作用1⑷项目管理工具和方法1⒋本文档涉及附件:附件1、面向对象程序设计示例代码附件2、面向对象程序设计练习题1⒌本文所涉及的法律名词及注释:1⑴版权:指对原创作品的独自权利,包括复制、修改、分发等权利。
1⑵商标:指用于区分商品或服务来源的标识,具有独特性和辨识度。
1⑶专利:指对发明、实用新型、外观设计等技术成果的独占权。
1⑷许可证:指授权他人使用某项权利的行为。
注:本文所涉及的法律名词及注释仅作为参考,具体以法律法规为准。
《C++面向对象程序设计》习题答案
{FILE *fp;
if((fp=fopen(FileName,"rb"))==NULL)
{printf("%s文件打开失败!\n",FileName);}
else
{IsOpen=1;
Index=0;
while(!feof(fp))
{fread(&stud[Index],sizeof(struct Stud),1,fp);
exit(1);
}
}
void main()
{printf("****************************************************\n");
printf("*********欢迎使用学生信息管理系统!*********\n");
printf("****************************************************\n");
printf("*************** 0.退出系统**************\n");
printf("****************************************************\n");
printf("请选择(1/0)?_");
scanf("%d",&n);
typedef struct {/*用于存放生日信息的结构体*/
int year;
int month;
int day;
}Date;
typedef struct Stud{/*用于存放学生信息的结构体*/
Java面向对象程序设计教程课后答案
Java面向对象程序设计教程课后答案第1章Java 概述1.Java具有那些适合在Internet环境中的特点?【答】简单性和完全面向对象,平台无关性,安全性和可靠性,多线程,高效的网络编程。
2.Java保留、放弃了C/C++语言中哪些语法和面向对象机制?为什么需要这样做?【答】在语法规则方面,Java语言放弃了全程变量、goto语句、宏定义、全局函数以及结构、联合和指针数据类型,使Java语言更简单、更精练。
在面向对象概念方面,Java语言放弃了多元继承、友元类和运算符重载,采用“单重继承+接口”的方式代替多重继承,提供语言级的内存自动管理和异常处理方式,使Java语言更健壮、更安全、更高效。
3.Java对原程序文件的命名规则有什么要求?源程序文件编译后生成什么文件?【答】要求:源程序文件与类同名,文件扩展名为.java;编译后生成字节码文件(*.class)。
4.Java程序的运行机制是怎样的?与C++或其他语言有什么不同?【答】Java的每一个类都有一个class文件和它对应,Java在程序的启动的时候将程序运行需要用到的类加载到虚拟机中,根据Java 的虚拟机规范进行连接(动态连接),程序的组装是在运行的时候完成的C++和其他的编译型的语言一样,它的程序的组装方式是一种传统的组装方式。
C++在编译的时候生成适用于某一平台的二进制代码,在连接的时候找到需要调用的库,然后将这些库中的代码连接进可执行程序之中,生成的可执行程序运行速度非常的快,但是可执行代码已经变成了一个整体,不可能再分开5.什么是平台无关性?Java是怎样实现平台无关性的?【答】平台无关性即Java程序的运行不依赖于操作系统。
Java采用虚拟机技术实现平台无关性。
程序由虚拟机解释执行,不同的操作系统上运行不同版本的Java虚拟机。
6.Java应用程序由哪两种形式?他们的运行方式有什么不同?【答】Application和applet两种形式,其中application是能够独立运行的应用程序,既可以以DOS的命令方式运行,也可以以图形用户界面方式运行。
面向对象程序设计(李爱华、程磊)课后习题答案
第二章2-4#include <iostream>using namespace std;Add(int a,int b);int main(){int x,y,sum;cout<<"please input x and y:";cin>>x>>y;sum = add(x,y);cout <<x<<"+"<<y<<"="<<sum<<endl;}Add(int a,int b){return a+b;}2-5(1)this is a C++ program.(2)x=50.6 y=10 z=Ax=216.34 y=10 z=Ax=216.34 y=2 z=Ax=216.34 y=2 z=E(3)x y z500 10000500 15001500500 200 15002-6#include <iostream>using namespace std;int main(){int *p,*init;int countp=0;int countn=0;p = new int[20];init = p;for(int i=0;i<20;i++){cin>>*p;p++;}p = p-20;for( i=0;i<20;i++){if(*p>0) countp++;if(*p<0) countn++;cout<<*p<<" ";p++;}cout<<"正数有 :"<<countp<<endl; cout<<"负数有 :"<<countn<<endl;p = init;delete[] p;return 0;}2-7 不做要求#include <iostream>//#include <string>using namespace std;void checkagescore(string name,int age) {if (name == "exit") throw name;if(age<0||age>50)throw age;}int main(){string name;int age;for(int i=0 ;i<5 ;i++ ){cin.ignore ();getline(cin,name );cin>>age ;try{checkagescore(name,age);}catch( string){cout<<"exception :name is exit"<<endl;continue;}catch(int){cout<<"exception :age is not proper"<<endl;continue;}cout<<"name:"<<name<<"age :"<<age<<endl;}return 0;}第三章3-1(1)A (2)C (3)B (4)C (5)C(6)B(7)B(8)C(9)C3-7(1)main()函数中p1.age = 30;语句是错误的。
李爱华、程磊_面向对象程序设计课后答案(完整版)
第二章2-4#include <iostream>using namespace std;Add(int a,int b);int main(){int x,y,sum;cout<<"please input x and y:";cin>>x>>y;sum = add(x,y);cout <<x<<"+"<<y<<"="<<sum<<endl;}Add(int a,int b){return a+b;}2-5(1)this is a C++ program.(2)x=50.6 y=10 z=Ax=216.34 y=10 z=Ax=216.34 y=2 z=Ax=216.34 y=2 z=E(3)x y z500 1000 0500 1500 1500500 200 15002-6#include <iostream>using namespace std;int main(){int *p,*init;int countp=0;int countn=0;p = new int[20];init = p;for(int i=0;i<20;i++){cin>>*p;p++;}p = p-20;for( i=0;i<20;i++){if(*p>0) countp++;if(*p<0) countn++;cout<<*p<<" ";p++;}cout<<"正数有:"<<countp<<endl; cout<<"负数有:"<<countn<<endl;p = init;delete[] p;return 0;}2-7不做要求#include <iostream>//#include <string>using namespace std;void checkagescore(string name,int age) {if (name == "exit") throw name;if(age<0||age>50)throw age;int main(){string name;int age;for(int i=0 ;i<5 ;i++ ){cin.ignore ();getline(cin,name );cin>>age ;try{checkagescore(name,age);}catch( string){cout<<"exception :name is exit"<<endl;continue;}catch(int){cout<<"exception :age is not proper"<<endl;continue;}cout<<"name:"<<name<<" age :"<<age<<endl;}return 0;}第三章3-1(1)A (2)C (3)B (4)C (5)C(6)B (7)B (8)C (9)C3-7(1)main()函数中p1.age = 30;语句是错误的。
面向对象课后题答案
第1章面向对象程序设计概论面向对象程序设计教程(C++语言描述)题解与课程设计指导第1章面向对象程序设计概论一、名词解释抽象封装消息【问题解答】面向对象方法中的抽象是指对具体问题(对象)进行概括,抽出一类对象的公共性质并加以描述的过程。
面向对象方法中的封装就是把抽象出来的对象的属性和行为结合成一个独立的单位,并尽可能隐蔽对象的内部细节。
消息是面向对象程序设计用来描述对象之间通信的机制。
一个消息就是一个对象要求另一个对象实施某种操作的一个请求。
二、填空题(1)目前有面向过程的结构化程序设计方法和面向对象的程序设计方法两种重要的程序设计方法。
(2)结构化程序设计方法中的模块由顺序、选择和循环3种基本结构组成。
(3)在结构化程序设计方法中,程序可表示为程序=数据结构+算法;而面向对象的程序设计方法,程序可表示为程序=对象+消息。
(4)结构化程序设计方法中的基本模块是过程;而面向对象程序设计方法中的基本模块是类。
(5)面向对象程序设计方法具有抽象性、封装性、继承性和多态性等特点。
三、选择题(至少选一个,可以多选)(1)面向对象程序设计着重于( B )的设计。
A. 对象B. 类C. 算法D. 数据(2)面向对象程序设计中,把对象的属性和行为组织在同一个模块内的机制叫做(C )。
A. 抽象B. 继承C. 封装D. 多态(3)在面向对象程序设计中,类通过( D )与外界发生关系。
A. 对象B. 类C. 消息D. 接口(4)面向对象程序设计中,对象与对象之间的通信机制是(C )。
A. 对象B. 类C. 消息D. 接口(5)关于C++与C语言的关系的描述中,(D )是错误的。
A. C语言是C++的一个子集B. C语言与C++是兼容的C. C++对C语言进行了一些改进D. C++和C语言都是面向对象的【结果分析】C语言是面向过程的。
C++语言是一种经过改进的更为优化的C语言,是一种混合型语言,既面向过程也面向对象。
李爱华、程磊_面向对象程序设计课后答案(完整版)
第二章之羊若含玉创作2-4#include <iostream>using namespace std;Add(int a,int b);int main(){int x,y,sum;cout<<"please input x and y:";cin>>x>>y;sum = add(x,y);cout <<x<<"+"<<y<<"="<<sum<<endl;}Add(int a,int b){return a+b;}2-5(1)this is a C++ program.(2)x=50.6 y=10 z=Ax=216.34 y=10 z=Ax=216.34 y=2 z=A x=216.34 y=2 z=E (3)x y z500 1000 0500 1500 1500 500 200 15002-6#include <iostream> using namespace std; int main(){int *p,*init;int countp=0;int countn=0;p = new int[20];init = p;for(int i=0;i<20;i++) {cin>>*p;p++;}p = p-20;for( i=0;i<20;i++){if(*p>0) countp++;if(*p<0) countn++;cout<<*p<<" ";p++;}cout<<"正数有:"<<countp<<endl;cout<<"负数有:"<<countn<<endl;p = init;delete[] p;return 0;}2-7不做要求#include <iostream>//#include <string>using namespace std;void checkagescore(string name,int age) {if (name == "exit") throw name;if(age<0||age>50)throw age;}int main(){string name;int age;for(int i=0 ;i<5 ;i++ ){cin.ignore ();getline(cin,name );cin>>age ;try{checkagescore(name,age);}catch( string){cout<<"exception :name is exit"<<endl;continue;}catch(int){cout<<"exception :age is not proper"<<endl;continue;}cout<<"name:"<<name<<" age :"<<age<<endl;}return 0;}第三章3-1(1)A (2)C (3)B (4)C (5)C(6)B (7)B (8)C (9)C3-7(1)main()函数中p1.age = 30;语句是错误的.age 是类的私有成员(2)结构函数应当给常数据成员和引用成员初始化,将结构函数改为:A(int a1,int b1):a(a1),b(b1){}或A(int a1 ):a(a1),b(a){}再将main中的A a(1,2); 改为A a(1); (3)(1)在Test 类中添加语句:void print();void Print(){cout<<x<<"-"<<y<<"="<<x-y<<endl; }改为void Test::Print(){cout<<x<<"-"<<y<<"="<<x-y<<endl; }main函数中Init(38,15);改为:A.Init(38,15);Print();改为:A.Print();3-8(1)Constructing AConstructing BDestructing BDestructing A(2)double a,double bpoint & p3-9class box{int len1,len2,len3;public:box(int l1,int l2,int l3){len1 = l1;len2 = l2; len3 = l3;} long volumn(){return len1*len2*len3;}};3-10class Test{int m1,m2;public:void Init(int a,int b){m1 = a;m2 = b;}void Pring(){cout<<m1<<" "<<m2<<endl;}};3-11略3-12}第四章4-6(1)D (2)D (3)D (4)D (5)B4-7(1)static int count = 0;这样初始化静态成员值是不合错误的将其改为static int count;在类外,main函数前加int Sample::count = 0;(2)#include <iostream>//#include <cstdlib>using namespace std;class Ctest{private:int x; const int y1;public:const int y2;Ctest(int i1,int i2):y1(i1),y2(i2){y1 =10;//y1 为常量不克不及赋值x = y1;int readme() const;};int Ctest::readme ()const{int i;i = x;x++; //常函数内不克不及改变成员值return x;}int main(){Ctest c(2,8);int i = c.y2;c.y2 = i;//y2为常量,不克不及改值i = c.y1;//y1私有,类外不克不及拜访return 0;}将出错语句全部注释4-8(1)题中印刷错误,将class C结构函数改为:C(){cout<<"constructor C:";}运行成果为:constructor A constructor B constructor C(2)40(3)3434-9#include<iostream.h> #include<stdio.h>class Date{int year;int month;int day;public:Date(int y,int m,int d) {year=y;month=m;day=d;}void disp(){cout<<year<<" "<<month<<" "<<day<<endl;}friend int count_day(Date &d,int k);friend int l(int year);friend int h(Date &d1,Date &d2);};int count_day(Date &d,int k){static int day_tab[2][12]={{31,28,31,30,31,30,31,31,30,31,30,31},{31,29,31,30,31,30,31,31,30,31,30,31}};// 使用二维数组存放各月天数,第一行对应非闰年,第二行对应闰年int j,i,s;if(l(d.year))j=1;//闰年,取1else j=0;//非闰年,取0if(k)//K非0时{s=d.day;s+=day_tab[j][i-1];}else//K为0时{s=day_tab[j][d.month]-d.day;for(i=d.month+1; i<=12; i++)s+=day_tab[j][i-1];}return s;//S为相差的天数}int l(int year){if(year%4==0&&year%100!=0||year%400==0) // 是闰年 return 1;else // 不是闰年return 0;}int h(Date &d1,Date &d2){int days,day1,day2,y;if(d1.year<d2.year)//第一个日期年份小于第二个日期年份 {days=count_day(d1,0);for(y=d1.year+1;y<d2.year;y++)if(l(y))//闰年days+=366L;else//非闰年days+=365L;days+=count_day(d2,1);}else if(d1.year==d2.year){day1=count_day(d1,1);day2=count_day(d2,1);days=day2-day1;}elsedays=-1;return days;}void main(){ int year1,year2,month1,month2,day1,day2;cout<<"输入日期1"<<endl;cin>>year1>>month1>>day1;cout<<"输入日期2"<<endl;cin>>year2>>month2>>day2;Date d1( year1, month1, day1),d2( year2, month2, day2); int ds=h(d1,d2);{cout<<"输出成果:"<<endl;}if(ds>=0){d1.disp(); printf("与");d2.disp(); printf("之间有%d天\n\n",ds);}else//第一个日期小于第二个日期cout<<"时间错误!"<<endl;}4-10#include<iostream.h>#include<string.h>class Student{int number;char name[20];public:Student(int i=0,char *s="\0") //结构学生对象{ number=i;strcpy(name,s);}void Print() //输出成果{ cout<<"Number:"<<number<<endl;cout<<"Name:"<<name<<endl;}friend bool greaterthan(Student &st1,Student &st2);};bool greaterthan(Student &st1,Student &st2){return st1.number>st2.number; //返回成员number 的比较成果}int main(){Studentst[5]={Student(65,"Li"),Student(78,"Zhang"),Student(80,"wang"), Student(92,"zhao"),Student(50,"zhen")};int max = 0;int min = 0;for(int i=1;i<5;i++){ if(!greaterthan(st[max],st[i]))max = i;if(!greaterthan(st[i],st[min]))min = i;}cout<<"最大成绩:"<<endl;st[max].Print ();cout<<"最小成绩:"<<endl;st[min].Print ();return 0;}4-11#include <iostream>#include <string>using namespace std;class Book{char *name;char*author;int sale;public:Book(){ name = '\0';author = '\0';sale = -1;}Book(char* a ,char* b,int c){name = new char[strlen(a)+1];strcpy(name,a);author = new char[strlen(b)+1];strcpy(author,b);sale = c;}void print(){cout<<"autor "<<author<<endl;cout<<"name "<<name<<endl;cout<<"price "<<sale<<endl;}~Book(){if(!name ) delete[] name;if(!author)delete[] author;}};int main(){Book b1("c++","li ai hua",12);Book b2;return 0;}第五章5-8改错题答案不唯一(1) class DC {int x;public:DC(){x =100;}};(2)编译无错,但逻辑错误,可改为: class BC{protected:int x;public:BC(int i=0){x = i} };class DC:private BC{public:DC(int i):BC(i){}};(3)将DC结构函数改为:DC(int i):BC(i){y = 0;} 5-9(1) base class(2) (10,5)(3,9-18,33)(13,19)(13,19-18,33)(13,19)5-10#include <iostream>using namespace std;class Shape{int x,y;public:Shape(int ix,int iy){x = ix; y = iy;}virtual void show(){cout<<"pos: "<<x<<' '<<y<<endl;}};class Circle :public Shape{int radius;public:Circle(int ix,int iy,int r):Shape(ix,iy),radius(r){}void show() {Shape::show ();cout<<"circle: "<<radius<<endl;}};class Rect :public Shape{int width,higth;public:Rect(int ix,int iy,int iw,int ih):Shape(ix,iy),width(iw),higth(ih){}void show() {Shape::show ();cout<<"width and higth: "<<width<<' '<<higth<<endl;} };int main(){Shape s1(1,1);Rect r1(2,2,8,8);Circle c1(3,3,9);r1.show ();c1.show();return 0;}5-11#include<iostream.h>class vehicle // 界说汽车类{protected:int date; // 年份float price; //价钱public:vehicle(int date,float price);int get_date();float get_price();float date_load();void show();};class car:public vehicle // 界说小车类{int passenger_load; // 载人数public:car(int date,float price,int passengers=4);int get_passengers();void show();};class truck:public vehicle // 界说卡车类{float payload; // 载重量public:truck(int date,float price,float max_load=24000.00); float efficiency();void show();};vehicle::vehicle(int date,float price){vehicle::date=date;vehicle::price=price;}int vehicle::get_date(){return date;}float vehicle::get_price(){return price;}void vehicle::show(){cout << "年份:" << date << "年" << endl; cout << "价钱:" << price << "元" << endl; }car::car(int date, float price,int passengers) :vehicle (date, price){passenger_load=passengers;}int car::get_passengers (){return passenger_load;}void car::show(){cout <<" 车型:小车" << endl;vehicle::show();cout << "载人:" << passenger_load << "人" << endl;cout << endl;}truck:: truck(int date, float price,float max_load):vehicle(date,price){payload=max_load;}float truck::efficiency(){return payload;}void truck::show(){cout <<"车型:卡车" << endl;vehicle:: show ();cout << "载重:" << efficiency() << endl;cout << endl;}void main (){car car1(2001,2000,5);truck tru1(2002,8000,340000);cout << "输出成果" << endl;car1. show ();tru1. show ();}第六章6-4d=3D::fun();6-5C::print(),cinfo=2C::print(),cinfo=2D::print(),dinfo=4B类不克不及界说对象,不然编译通不过,因为B未界说基类A中的虚函数print(),它也是个虚基类.6-6#include <iostream>using namespace std;class Mammal{public:virtual void Speak(){cout<<"in Mammal"<<endl;} };class Dog:public Mammal{public:void Speak(){cout<<"dog bark"<<endl;} };int main(){Dog dog;Mammal *pM;pM = &dog;pM->Speak ();return 0;}运行成果:dog bark6-7#include <iostream>using namespace std;class BaseClass{public:virtual ~BaseClass(){cout<<"destruct Base"<<endl;}};class Derived:public BaseClass{public:~Derived(){cout<<"destruct derived"<<endl;}};int main(){BaseClass *pbase;pbase = new Derived;delete pbase;}成果将不克不及正常执行子类析构6-8 #include <iostream>using namespace std;class Shape{public:virtual double Area() = 0;};class Circle :public Shape{double radius;public:Circle(double r):radius(r){}double Area() {return 3.14*radius*radius;} };class Square :public Shape{double radius;public:Square(double r):radius(r){}double Area() {return 6*radius*radius;}};class Rectangle :public Shape{double width,radius;public:Rectangle(double w,double r):radius(r){width=w;}double Area() {return width*radius;}};class Trapezoid :public Shape{double height,radius,length;public:Trapezoid(double h,double r,double l):radius(r){height=h;length=l;}double Area() {return height*(radius+length)/2;}};class Triangle :public Shape{double height,radius;public:Triangle(double h,double r):radius(r){height=h;} double Area() {return height*radius/2;}};int main(){double AreaSum= 0;Shape * pS[6];pS[1] = new Circle(1);pS[2] = new Square(2);pS[3] = new Rectangle(1,2);pS[4] = new Trapezoid(4,2,5);pS[5] = new Triangle(4,2);AreaSum += pS[1]->Area();AreaSum += pS[2]->Area();AreaSum += pS[3]->Area();AreaSum += pS[4]->Area();AreaSum += pS[5]->Area();cout<<"总面积是:"<<AreaSum<<endl;cout<<"各三维图形面积如下:"<<endl;cout<<"圆形:"<<pS[1]->Area()<<endl;cout<<"正方形:"<<pS[2]->Area()<<endl;cout<<"长方形:"<<pS[3]->Area()<<endl;cout<<"梯形:"<<pS[4]->Area()<<endl;cout<<"三角形:"<<pS[5]->Area()<<endl;return 0;}6-9#include <iostream>using namespace std;class Student{public:virtual void show() = 0;};class Junior :public Student{public:void show(){cout<<"this would be info for junior students"<<endl;}};class Senior :public Student{public:void show(){cout<<"this would be info for Senior students"<<endl;}};int main(){Student *pstu;pstu = new Junior;pstu->show ();pstu = new Senior;pstu->show ();return 0;}第七章7-1#include <iostream>#include <string>using namespace std;class vector{int x,y;public:vector(int ix=0,int iy=0){x =ix;y = iy;}vector operator+(vector& v1){return vector(x+v1.x,y+v1.y);}vector& operator+=(vector& v1){x +=v1.x;y +=v1.y;return *this;}void show(){cout<<'('<<x<<','<<y<<')'<<endl;}};int main(){vector v1(1,2),v2(3,4),v3;v3 = v1+v2;v1+=v2;v3.show();v1.show();return 0;}7-2#include <iostream.h>class Complex{private:double real,image;public:Complex(double x=0.0,double y=0.0){ real =x; image =y; }bool operator !=(const Complex &c); Complex operator -(const Complex &c); bool operator ==(const Complex &c); Complex operator -();Complex &operator +=(const Complex &c); void Print();};void Complex::Print(){cout<<real<<" + "<<image<<"i"<<endl;}Complex Complex ::operator -(const Complex &c){Complex temp(real-c.real,image-c.image);return temp;}bool Complex ::operator ==(const Complex &c){return (real==c.real && image==c.image);}bool Complex::operator !=(const Complex &c){return (real!=c.real || image!=c.image);}Complex Complex ::operator -(){return Complex(-real,-image);}Complex &Complex ::operator +=(const Complex &c) {real+=c.real;image+=c.image;return *this;}int main(){Complex c1(2,7),c2(4,2),c3;c3=c1-c2;c3.Print();if(c3==c1)cout<<"c3 equals to c1"<<endl;else cout<<"c3 doesn?ˉt equale to c1"<<endl;c3=-c2;c3.Print();c3+=c2;c3.Print();if(c3 != c1) c out<<"c3!=c1"<<endl;return 0;}7-3#include <iostream>using namespace std;bool rn(int y){bool flag = 0;if(y%400==0 || y%4 ==0&&y%100!=0)flag = 1;return flag;}class Date{ private:int month, day, year;public:Date(int m, int d, int y);Date& operator+(int days);void showDate();};Date::Date(int y, int m, int d){ if (m>0 && m<13)month=m;if (d>0 && d<32)day=d;if (y>0 && y<3000)year=y;}Date& Date::operator+(int days){int i;for(i = days;i>0;){int diff ;switch(month){case 1:case 3:case 5:case 7:case 8:case 10:case 12: diff = 31 -day;break;case 4:case 6:case 9:case 11: diff = 30 -day;break;case 2:if (rn(year))diff = 29 - day;else diff = 28 -day;break;}if(i>diff){i-= diff+1;day = 1;month++;if(month>12){year++;month = 1;}}else{day+= i;break;}}return *this;}void Date::showDate(){cout<<year<<"."<<month<<"."<<day<<endl; }int main(){Date obj(1996,1,1);obj.showDate ();obj = obj+59;obj.showDate();return 0;}7-4 以+,=为例#include<iostream>#include<string.h>using namespace std; class String{char *sbuf;int length;public:String(){length=0;sbuf=new char;sbuf[0]='\0';}String(char *s) //用字符串初始化{length=strlen(s);sbuf=new char[length+1];strcpy(sbuf,s);}String (String& str){length=str.length ;sbuf=new char[length+1];strcpy(sbuf,str.sbuf );}~String(){delete[] sbuf;}String & operator =(String& str){if(sbuf == str.sbuf )return *this;else{sbuf = new char[str.length +1];strcpy(sbuf,str.sbuf );return *this;}}String operator +(String& str)//此函数需合营拷贝结构函数{String st;st.length = length + str.length ;st.sbuf = new char[st.length+1 ];st.sbuf [0] = '\0';strcpy(st.sbuf,sbuf);strcat(st.sbuf,str.sbuf );return st;}char & operator[](int i){if(i<0||i>=length) //对下标进行检讨,超出规模则报错退出程序{cout<<"下标越界错误!"<<endl;exit(0);}return sbuf[i];}void Show(){cout<<sbuf<<endl;}};int main(){String s1("hello");String s2("world"),s3 ;s3 = s1+s2; //s3.Show ();return 0;}7-6float *a;public:polynomial(int x){n=x;a=newfloat[n];}polynomial (const polynomial & p)//增加一个拷贝复制结构函数{n=p.n;a= newfloat [p.n];for (int i=0; i<p.n; i++){a[i]=p.a[i];}}polynomial(){}~polynomial(){delete[]a;void seta(int y,float x){a[y]=x;}void print(){cout<<"y="<<a[n-1]<<"x^("<<n-1<<")";for(i=n-2;i>=0;i--)cout<<"+"<<a[i]<<"x^("<<i<<")";cout<<endl;}polynomial operator +(polynomial &x){if(n>=x.n){polynomial t(n);copy(t,*this);for(i=0;i<x.n;i++)t.a[i]=t.a[i]+x.a[i];return t;}{polynomial t(x.n);copy(t,x);for(i=0;i<n;i++)t.a[i]=t.a[i]+a[i];return t;}}polynomial operator -(polynomial &x){if(n>=x.n){polynomial t(n);copy(t,*this);for(i=0;i<=x.n;i++)t.a[i]=t.a[i]-x.a[i];return t;}else{polynomial t(x.n);copy(t,x);for(i=0;i<=n;i++)t.a[i]=t.a[i]-a[i];return t;}}friend void copy(polynomial &x,polynomial &y);};void copy(polynomial &x,polynomial &y){int i;if(x.n<y.n){cout<<"无法复制"<<endl;x.print();y.print();//system("pause");}for(i=01;i++)x.a[i]=y.a[i];}void main()第八章8-1(1)template<typename T> T fun(T a){....}(2) template<typename T>T test(T a){....}(3) template<typename T>class Array{public:void fun();}template<typename T>void Array<T>::fun(){.....}(4)Array<int> a1,a2,a3;8-4#include<iostream>using namespace std; template <typename T>T max(T a,T b,T c){T temp;temp=a>b?a:b;temp=temp>c?temp:c;return temp;}int main(){cout<<max(11,29,22)<<endl;cout<<max(,,)<<endl;cout<<max('c','b','a')<<endl;return 0;}8-5及8-6#include< iostream>#include<string>using namespace std;template <typename T >void sort_bubble(T arr[],int n){for(int i=0; i<n-1;i++){for(int j=0;j<n-1-i;j++)if( arr[j]<arr[j+1]){T temp; temp=arr[j]; arr[j]=arr[j+1]; arr[j+1]=temp;} }}。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
面向对象程序设计教程(C++语言描述)题解与课程设计指导第1章面向对象程序设计概论一、名词解释抽象封装消息【问题解答】面向对象方法中的抽象是指对具体问题(对象)进行概括,抽出一类对象的公共性质并加以描述的过程。
面向对象方法中的封装就是把抽象出来的对象的属性和行为结合成一个独立的单位,并尽可能隐蔽对象的内部细节。
消息是面向对象程序设计用来描述对象之间通信的机制。
一个消息就是一个对象要求另一个对象实施某种操作的一个请求。
二、填空题(1)目前有面向过程的结构化程序设计方法和面向对象的程序设计方法两种重要的程序设计方法。
(2)结构化程序设计方法中的模块由顺序、选择和循环3种基本结构组成。
(3)在结构化程序设计方法中,程序可表示为程序=数据结构+算法;而面向对象的程序设计方法,程序可表示为程序=对象+消息。
(4)结构化程序设计方法中的基本模块是过程;而面向对象程序设计方法中的基本模块是类。
(5)面向对象程序设计方法具有抽象性、封装性、继承性和多态性等特点。
三、选择题(至少选一个,可以多选)(1)面向对象程序设计着重于( B )的设计。
A. 对象B. 类C. 算法D. 数据(2)面向对象程序设计中,把对象的属性和行为组织在同一个模块内的机制叫做(C )。
A. 抽象B. 继承C. 封装D. 多态(3)在面向对象程序设计中,类通过( D )与外界发生关系。
A. 对象B. 类C. 消息D. 接口(4)面向对象程序设计中,对象与对象之间的通信机制是(C )。
A. 对象B. 类C. 消息D. 接口(5)关于C++与C语言的关系的描述中,(D )是错误的。
A. C语言是C++的一个子集B. C语言与C++是兼容的C. C++对C语言进行了一些改进D. C++和C语言都是面向对象的【结果分析】C语言是面向过程的。
C++语言是一种经过改进的更为优化的C语言,是一种混合型语言,既面向过程也面向对象。
(6)面向对象的程序设计将数据结构与( A )放在一起,作为一个相互依存、不可分割的整体来处理。
A. 算法B. 信息C. 数据隐藏D. 数据抽象(7)下面( A )不是面向对象系统所包含的要素。
A. 重载B. 对象C. 类D. 继承【结果分析】面向对象=对象+类+继承+消息+多态(8)下面说法正确的是(BC )。
A. 将数据结构和算法置于同一个函数内,即为数据封装B. 一个类通过继承可以获得另一个类的特性C. 面向对象要求程序员集中于事物的本质特征,用抽象的观点看待程序D. 同一消息为不同的对象接受时,产生的行为是一样的,这称为一致性【结果分析】面向对象程序设计方法具有抽象性、封装性、继承性和多态性等特点。
将数据结构和算法置于同一个类内,即为数据封装。
同一消息为不同的对象接受时,产生的行为可能是不一样的,这称为多态性。
(9)下面说法正确的是(AD )。
A. 对象是计算机内存中的一块区域,它可以存放代码和数据B. 对象实际是功能相对独立的一段程序C. 各个对象间的数据可以共享是对象的一大优点D. 在面向对象的程序中,对象之间只能通过消息相互通信【结果分析】对象是计算机内存中的一块区域。
在对象中,不但存有数据,而且存有代码,使得每个对象在功能上相互之间保持相对独立。
对象之间存在各种联系,但它们之间只能通过消息进行通信。
四、判断题(1)在高级程序设计语言中,一般用类来实现对象,类是具有相同属性和行为的一组对象的集合,它是创建对象的模板。
(√)(2)C++语言只支持面向对象技术的抽象性、封装性、继承性等特性,而不支持多态性。
(×)【结果分析】C++语言不仅支持面向对象技术的抽象性、封装性、继承性等特性,而且支持多态性。
(3)面向对象程序设计中的消息应该包含“如何做”的信息。
(×)【结果分析】消息是面向对象程序设计用来描述对象之间通信的机制。
向对象“发送消息”只需告诉对象做什么,对象根据这个消息决定如何做。
(4)一个消息只能产生特定的响应效果。
(×)【结果分析】当一个对象发出消息时,由于接收对象的类型可能不同,所以,它们可能做出不同的反应。
这样,一个消息可以产生不同的响应效果,这种现象叫做多态。
(5)类的设计和类的继承机制实现了软件模块的可重用性。
(√)(6)C++语言和Java语言均不是一个纯正的面向对象的程序设计的语言。
(×)【结果分析】Java语言是一个纯正的面向对象的程序设计语言。
(7)学习C++语言是学习面向对象的程序设计方法的唯一途径。
(×)【结果分析】程序设计方法是独立于具体程序设计语言的一种技术,学习C++语言是学习面向对象程序设计方法的重要途径之一。
(8)在C++语言中,类是支持数据封装的工具。
(√)五、简答题(1)什么是结构化程序设计方法?它有哪些优点和缺点?【问题解答】结构化程序设计方法着眼于系统要实现的功能,从系统的输入输出出发,分析系统要做哪些事情,进而考虑如何做这些事情,自顶向下地对系统的功能进行分解,来建立系统的功能结构和相应的程序模块结构,有效地将一个较复杂的程序系统设计任务分解成许多易于控制和处理的子任务,便于开发和维护。
随着程序规模与复杂性的增长,这种面向过程的结构化程序设计方法存在明显的不足之处。
首先是数据安全性问题。
由于数据被每个模块所共用,因此是不安全的,一旦出错,很难查明原因。
其次是可维护性及可重用性差。
它把数据结构和算法分离为相互独立的实体,一旦数据结构需要改变时,常常要涉及整个程序,修改工作量极大并容易产生新的错误。
每一种相对于老问题的新方法都要带来额外的开销。
另外,图形用户界面的应用程序,很难用过程来描述和实现,开发和维护也都很困难。
(2)什么是面向对象程序设计方法?它有哪些优点?【问题解答】面向对象的程序设计方法中,将程序设计为一组相互协作的对象而不是一组相互协作的函数。
在程序中,属性用数据表示,用来描述对象静态特征;行为用程序代码实现,用来描述对象动态特征。
可见,在面向对象的程序设计方法中,对象是数据结构和算法的封装体。
对象之间存在各种联系,它们之间通过消息进行通信。
程序可表示为:程序=对象+消息在面向对象程序设计中应着重于类的设计。
类正是面向对象语言的基本程序模块,通过类的设计来完成实体的建模任务。
类通过一个简单的外部接口与外界发生关系。
一个类中的操作不会处理到另一个类中的数据,这样程序模块的独立性、数据的安全性就有了良好的保障。
程序的执行取决于事件发生的顺序,由顺序产生的消息来驱动程序的执行。
不必预先确定消息产生的顺序,更符合客观世界的实际。
并且面向对象程序设计方法提供了软件重用、解决大问题和复杂问题的有效途径,具有抽象性、封装性、继承性和多态性等特点。
(3)结构化程序设计方法与面向对象程序设计方法在对待数据结构和算法关系上有什么不同?【问题解答】结构化程序设计方法中,把数据结构和算法分离为相互独立的实体;而在面向对象程序设计中,数据结构和算法封装在一起,结合成一个独立的单位,即对象,并尽可能隐蔽对象的内部细节。
对象的私有属性只能由这个对象的行为来读取和修改,与外部的联系通过公有行为充当外部接口。
第2章从C到C++面向对象程序设计教程(C++语言描述)题解与课程设计指导第2章从C到C++一、名词解释引用内联函数重载函数【问题解答】所谓引用就是给对象取一个别名,使用该别名可以存取该对象。
换句话说是使新对象和原对象共用一个地址。
内联函数是使用inline关键字声明的函数。
重载函数指在同一个作用域内名字相同而参数不同的函数。
重载函数通常用来对具有相似行为而数据类型或数据个数不同的操作提供—个通用的名称。
二、填空题(1)一般情况下,用C++语言编写的程序是由函数加上类组成的。
(2)C++有两种注释符号,一种是//,另一种是/*……*/。
(3)使用C++风格的输入输出,在程序中必须包含头文件“iostream”。
(4)cin是预定义的标准输入流对象,>>是输入操作符,也称提取运算符。
(5)cout是预定义的标准输出流对象,<<是输出操作符,也称插入运算符。
(6)指针的值是它所指向那个对象的地址值。
指针的类型是它所指向对象的类型。
指针的内容便是它所指向对象的值。
(7)C++使用运算符&来定义一个引用,对引用的存取都是对它所引用的对象的存取。
(8)当一个函数调用出现在函数定义之前时,必须先用函数原型对函数进行声明。
(9)C++有值传递和引用传递两种参数传递机制。
(10)使用关键字inline声明的函数称为内联函数。
(11)运算符new用于进行动态内存分配,运算符delete用于释放动态分配的内存。
(12)下面程序的输出结果为x=10,y=10;x=100,y=100。
#include<iostream>using namespace std;int main(){int x=10,&y=x;cout<<"x="<<x<<",y="<<y<<endl;int *p=&y;*p=100;cout<<"x="<<x<<",y="<<y<<endl;return 0;}三、选择题(至少选一个,可以多选)(1)在整型指针变量p2、p3的定义中,错误的是( A )。
A. int p1,*p2,p3;B. int*p2,p1,*p3;C. int p1,*p2=&p1,*p3;D. int*p2,p1,*p3=&p1;【结果分析】指针定义的具体格式如下所示:<类型> *<指针名1>,*<指针名2>,…;(2)若有定义“double xx=3.14,*pp=&xx;”,则*pp等价于( C )。
A. &xxB. *xxC. 3.14D. xx【结果分析】pp指向xx所在的内存单元,这样*pp和xx等价。
(3)下面对引用的描述中( C )是错误的。
A. 引用是某个变量或对象的别名B. 建立引用时,要对它初始化C. 对引用初始化可以使用任意类型的变量D. 引用与其代表的对象具有相同的地址【结果分析】所谓引用就是给对象取一个别名,使用该别名可以存取该对象,所以对引用初始化必须使用同类型的变量。
(4)函数没有返回值的时候,应该选择( A )的函数类型。
A. voidB. intC. 不确定D. float(5)在函数的定义格式中,下面各组成部分中,( D )是可以省略的。
A. 函数名B. 函数体C. 返回值类型D. 函数参数【结果分析】函数的定义可以缺省形式参数,此时称为无参函数。