第3章 类与对象习题 参考答案
- 格式:docx
- 大小:26.82 KB
- 文档页数:5
C++面向对象程序设计习题解答与上机指导(第2版)习题参考答案源代码使用源程序的几点注意事项(1) 由于源程序在复制、编辑、解压缩等过程中可能引起部分符号(主要是标点符号,如分号、冒号、逗号、引号)的字体、半全角等发生变化,在编译时可能被检出语法错误,只要使用“替换”功能,纠正后即能顺利运行。
(2) 有的C++系统(如Visual C++6.0)没有完全实现C++标准,它所提供的不带后缀的.h 的头文件不支持友元运算符重载函数,在Visual C++6.0中编译会出错,这时可采用带后缀的.h头文件。
将程序中的#include<iostream>using namespace std;修改成#include<iostream.h>即可顺利运行。
第2章 C++基础【2.2】下面是一个C程序,改写它,使它采用C++风格的I/O语句。
#include<stdio.h>int main(){ int a,b,d,min;printf("Enter two numbers:");scanf("%d%d",&a,&b);min=a>b? b:a;for (d=2; d<min; d++)if (((a%d)==0)&&((b%d)==0)) break;if (d==min){ printf("No common denominators\n");return 0;}printf("The lowest common denominator is %d\n",d);return 0;}【解】#include<iostream>using namespace std;int main(){ int a,b,d,min;cout<<"Enter two numbers:";cin>>a;cin>>b;min=a>b? b:a;for (d=2; d<min; d++)if (((a%d)==0)&&((b%d)==0)) break;if (d==min){ cout<<"No common denominators\n";return 0;}cout<<"The lowest common denominator is "<<endl<<d;return 0;}【2.24】写出下列程序的运行结果。
C++第三章课后答案C++第三章习题及答案1、什么是结构化程序设计?它有什么优缺点?所谓结构化程序设计,是一种自顶而下、逐步求精的模块化程序设计方法。
2、什么是对象?什么是类?简述对象与类之间的关系!对象是系统中用来描述客观事物的一个实体,它是用于构成系统的一个基本单位,而系统可以看作是由一系列相互作用的对象组成。
类定义了同类对象的公共属性和行为,属性用数据结构表示,行为用函数表示!《类=数据结构+对数据进行操作的函数》。
对象和类的关系相当于元素和集合的关系、变量和变量的“数据类型”的关系。
从程序设计的角度来说,类是一种复杂的自定义数据类型,对象是属于这种数据类型的变量。
3、什么是面向对象程序设计?面向对象程序设计方法具有哪些基本特征?请比较面向对象程序设计和面向对象过程程序设计有何异同?4、何谓成员变量?何谓成员函数?C++将对象的属性抽象为数据成员,将对象的行为抽象为成员函数。
5、C++中结构和类之间有何异同?结构在默认情况下的成员是公共的,而类在默认情况下的成员是私有的。
在C++中,结构是特殊的类。
6、在C++中如何定义类?如何实现定义的类?如何利用类申明对象?7、类的成员的访问权限有哪几种?请说明它们分别有什么作用?三种,privte:类的私有成员,只能被本类的成员函数访问或调用。
Public:公有成员,可以被本类的成员或其他类的成员函数(通过对象)访问或调用。
Protected:保护成员,可以被本类的成员函数或派生类的成员函数访问或调用。
8、何谓构造函数?何谓析构函数?请说明它们分别有什么作用?构造函数:不需要用户程序调用,就能在创建对象时由系统自动调用,其作用是在对象被创建时利用初始值去构造对象,使得在声明对象时就能自动完成对象的初始化。
析构函数:在对象的生存周期即将结束时由系统自动调用的,其作用是用来在对象被删除前做一些清理工作和数据保存工作。
9、如何定义一个内联成员函数?内联函:内联函数必须是和函数体申明在一起,才有效。
面向对象的程序设计语言――C++(第二版)-习题参考答案课后习题答案以及代码习题参考答案第1章1.填空题C++语言概述(1)函数说明,函数体(2)声明区,主程序区,函数定义区(3)多态性(4)namespace,using(5)std(6)cin,(7)//(8)对数据的操作2.判断题(1)对(2)错(3)错(4)错(5)错3.改错题(1)没有函数体,应改为void main() {};(2)语句没有分号,应改为using namespace myspace;(3)cout和操作符共同完成输出的功能,应改为cout“ Input your name:";(4)应改为#include iostream.h4.简答题5.编程题(略)(略)第2章1.选择题基本数据类型、运算符与表达式(1)B (2)D (3)B (4)D (5)B课后习题答案以及代码2.简答题(1)(a)、(c)(e)、(f)、(g)、(h)、(i)(2)(a)、(g)、(i)、(j)(3)(a)5.5(b)0(c)20(d)0,0(e)1(f)1,2(g)3(h)-40(i)2(j)3(k)s1='0's1='9'(l)N!=03.读程序写结果(1)0,15(2)(1、1、1),(-1、-1、-1)(3)(a)a*a+2*a*b+b*b(b)4.0/3.0*3.__-__R*R*R(c)5.0/9.0*(F-32)(d)b=ab=c(4)364143(5)x=14.编程题(略)第3章1.选择题(1)B (2)A (3)A (4)C2.判断题(1)错(2)对(3)对(4)错3.读程序写结果(1)C++的控制语句5)A 5)错((课后习题答案以及代码12 23 3 34 4 4 45 5 5 5 5(2)11 2 11 2 3 2 11 2 3 4 3 2 11 2 3 4 5 4 3 2 1(3)j的值为0;i的值为2;4.编程题(略)第4章1.填空题函数(1)void(2)静态全局变量,static(3)函数重载(4)inline(5)递归函数(6)宏定义命令,文件包含命令,条件编译命令2.判断题(1)错(2)错(3)错(4)错(5)错(6)对(7)错(8)错(9)对(10)对3.读程序写结果(1)x=7,y=4x=9,y=5(2)34.56101(3)162228(4)12 15 18 21 24课后习题答案以及代码(5)2,1,4,1,3,2,1,4.简答题5.编程题(略)(略)第5章1.选择题构造数据类型(1)C (2)D (3)A (4)B (5)C 2.判断题(1)错(2)对(3)对(4)错(5)错3.读程序写结果(1)153(2)422 5 6 8 10(3)__,21(4)419(5)6904(6)43214.编程题(略)第6章1.填空题(1)类,对象,类(2)数据成员,成员函数(3)不能(4)private,protected,public,private (5)成员函数类和对象课后习题答案以及代码(6)friend(7)类名,作用域运算符(8)对象名.成员名,指针变量名-成员名,(*指针变量名).成员名(9)构造,析构,构造,析构(10)常量数据,引用数据(11)全局,数据类型,所属的类(12)常成员,只读(13)成员,友元(14)类数据成员,类成员函数(15)this(16)浅拷贝2.选择题(1)C (2)C (3)B (4)C (5)B(6)C (7)D (8)B (9)C (10)D(11)A (12)C (13)D (14)D (15)B3.改错题(1)man1.salary=1000.00; 不能在类外访问类的私有成员(2)float r=0;和float c=0; 类本身是抽象的,不能在类的定义体中给其数据成员赋值}后缺少分号“;”(3)成员函数void setdata(float x1,float y1,float r);没有实现(4)构造函数名point()应与类名同名,为Point没有头文件包含#include iostream.h4.读程序写结果题(1)x=0,y=0x=100,y=200(2)x=100,y=200x=1000,y=2022年t=3.14(3)Sta::fun2()=10s.fun2()=11r.a=20(4)Constructor1 called!x=0Constructor2 called!x=100Destructor called!Destructor called!(5)课后习题答案以及代码575.简答题6.编程题(略)(略)第7章1.填空题(1)继承(2)基类,派生类(3)private,protected,public,private (4)不可访问,保护,公有(5)私有(6)单(一),多(重)(7)赋值兼容规则(8)静态,动态(9)抽象类2.选择题继承和派生(1)B (2)A (3)B (4)C (5)B (6)A (7)D (8)B (9)B (10)B(11)D (12)B3.改错题(1)本题的错误主要是数据成员的访问权限问题:基类的私有成员在派生类中不可访问,如fb()函数中的a3=30;语句;类的私有和保护成员在类外不能访问,如main函数中的x.a2 =20;.a3=30; ,y.a2=200; ,y.a3=300; ,y.b2=2022年;和y.b3=3000;语句。
第3章练习题参考答案一、判断题(正确Y,错误N)1.软件产品的设计报告、维护手册和用户使用指南等不属于计算机软件的组成部分。
2. 完成从汇编语言到机器语言翻译过程的程序,称为编译程序。
3. 有一种计算机系统允许多个用户同时使用,每个用户都感觉好象自己在“独占”该计算机一样,这样的系统称为“分时处理系统”。
4. 从应用角度出发,通常将软件分为系统软件和应用软件两类,数据库管理系统软件属于应用软件。
5. 计算机软件技术就是指程序设计技术,包括程序的设计、编码、调试和维护等。
6. BIOS,Windows操作系统,C语言编译器等都是系统软件。
7. 汇编语言是面向机器指令系统的,因此汇编语言程序可以由计算机直接执行。
8. 程序是软件的主体,单独的数据和文档一般不认为是软件。
9. 操作系统的处理器调度程序负责计算机中所有处理器的分配和回收。
10. .虚拟存储器其实就是外存储器。
11.语言处理系统中的连接程序是将多个分别编译或汇编过的目标程序和库文件进行组合。
12. 所谓系统软件,就是购置计算机时计算机供应商提供的全部软件。
13.计算机自举完成后,操作系统的所有程序常驻内存。
操作系统可以在任何计算机上运行。
15.在裸机上不能运行任何程序。
16.在Windows系统中每张片软盘和每个逻辑硬盘经过高级格式化后都有一个根目录区存在于盘中。
参考答案:1~10:NNYNNYNYNN 11~16:YNNNNY二、单选题1. 目前流行的很多操作系统都具有网络功能,可以作为一个网络操作系统,以下操作系统中不能作为网络服务器操作系统的是_______。
A. Windows 98 B. Windows NT ServerC. Windows 2000 Server D. UNIX2. 高级语言种类繁多,但其基本成分可归纳为四种,其中对处理对象的类型说明属于高级语言中的_______ 成分。
A.数据B.运算 C.控制D.传输3. 在下列常用的PC机软件中,编辑的文档(内容)能直接保存为图片类型(例如JPEG文件类型)的是。
c++第2章类和对象习题《面向对象程序设计》习题班级:学号:姓名:名单序号:成绩:第2章类与对象一、选择题(共26分,每题1分)1.下列有关类的说法不正确的是()。
A.对象是类的一个实例B.任何一个对象只能属于一个具体的类C.一个类只能有一个对象D.类与对象的关系和数据类型与变量的关系相似2.下面()项是对构造函数和析构函数的正确定义。
A.void X::X(), void X::~X()B.X::X(参数), X::~X()C.X::X(参数), X::~X(参数)D.void X::X(参数), void X::~X(参数)3.()的功能是对象进行初始化。
A.析构函数 B.数据成员 C.构造函数 D.静态成员函数4.下列表达方式正确的是()。
A.class P{ B. class P{public:public:intx=15;int x;void show(){cout<<<x;}<="">};}C. class P{ D. class P{int f; public:};int a;f=25; void Seta (int x) {a=x;}};5.拷贝构造函数具有的下列特点中,()是错误的。
A.如果一个类中没有定义拷贝构造函数时,系统将自动生成一个默认的B.拷贝构造函数只有一个参数,并且是该类对象的引用C.拷贝构造函数是一种成员函数D.拷贝构造函数的名字不能用类名6.关于静态成员的描述中,()是错误的。
A.静态成员可分为静态数据成员和静态成员函数B.静态数据成员定义后必须在类体内进行初始化C.静态数据成员初始化不使用其构造函数D.静态数据成员函数中不能直接引用非静态成员7.关于友元的描述中,()是错误的。
A.友元函数是成员函数,它被说明在类体内B.友元函数可直接访问类中的私有成员C.友元函数破坏封装性,使用时尽量少用D.友元类中的所有成员函数都是友元函数8.对类的构造函数和析构函数描述正确的是()。
第2章类和对象一、选择题1、()不是构造函数的特征。
A、构造函数的函数名与类名相同;B、构造函数可以重载;C、构造函数可以设置缺省参数;D、构造函数必须指定类型说明。
2、下列关于构造函数的描述中,()是正确的。
A、构造函数可以设置缺省参数;B、构造函数可以被继承;C、构造函数可以对静态数据成员进行初始化;D、构造函数可以说明为虚函数;3、()是析构函数的特征。
A、析构函数可以有一个或多个参数;B、析构函数名与类名不同;C、析构函数的定义只能在类体内;D、一个类中只能定义一个析构函数;4、定义析构函数时,应该注意()。
A、其函数名与类名完全相同;B、函数返回类型是void类型;C、无形参,也不可重载;D、函数体中必须有delete语句;5、下列静态数据成员的特性中,()是错误的。
A、说明静态数据成员时前边要加修饰符static;B、静态数据成员要在类体外进行初始化;C、静态数据成员不是所有对象所共用的;D、引用静态数据成员时,要在其名称前加<类名>和作用域运算符;6、友元的作用是()。
A、提高程序的运用效率;B、加强类的封装性;C、实现数据的隐藏性;D、增加成员函数的种类;7、关于成员函数特征的下列描述中,()是错误的。
A、成员函数一定是内联函数;B、成员函数可以重载;C、成员函数可以设置缺省参数值;D、成员函数可以是静态的;8、已知:print()函数是一个类的常成员函数,它无返回值,下列表示中,()是正确的;A、void print() const;B、const void print();C、void const print();D、void print(const);9、在()情况下适宜采用inline定义内联函数。
A、函数体含有循环语句;B、函数体含有递归语句;C、函数代码小,频繁调用;D、函数代码多,不常调用;10、假定AB为一个类,则执行“AB a(4) , b[3] , * p[2] ;”语句时,自动调用该类构造函数的次数为( )。
JAVA 类和对象及数组习题一、选择题(1)下列构造方法的调用方式中,正确的是(D )——原因:在通过new实例化一个类对象时系统会自动调用该类相应的构造方法。
A.按照一般方法调用B。
由用户直接调用ﻫC.只能通过new 自动调用D。
被系统调用(2)在Java 中,能实现多重继承效果的方式是( C )——原因:一个类可以同时实现多个接口。
Java 接口反映了对象较高层次的抽象,还弥补了Java只支持单继承的不足,可用它来完成多继承的一些功能。
◻A。
内部类B.适配器 C.接口D.同步(3)int 型public 成员变量MAX_LENGTH,该值保持为常数100,则定义这个变量的语句是( D )—原因:java 中定义常量用关键字final 来定义.A.public int MAX_LENGTH=100 B。
finalintMAX_LENGTH=100 ﻫC.public const int MAX_LENGTH=100D.p ublic final int MAX_LENGTH=100(4)下列叙述中,正确的是( A)—原因:Java 严格区分大小写,所以变量number 与Number 不相同;Java 中的注释方式除了“//”行注释之外还有段注释“/*---——--*/"和文档注释/**-—---- */。
Java 源文件中的public 类只能有一个。
◻A.声明变量时必须指定一个类型ﻫ B. Java认为变量number 与Number 相同ﻫC. Java中唯一的注释方式是"//"ﻫD。
源文件中public类可以有0 或多个(5)下列叙述中,错误的是(D )—原因:子类继承父类,并且可以有自己的成员变量和成员方法。
所以可以认为子类是父类的扩展。
◻A。
父类不能替代子类B.子类能够替代父类ﻫC。
子类继承父类D.父类包含子类(6)下列代码中,将引起编译错误的行是(B)—原因:定义float 型变量并对其初始化时,其值后面要加一个f。
Java2实用教程(第三版)课后习题参考答案第1章 Java入门1. 开发与运行Java程序需要经过哪些主要步骤和过程?答:(1)编写Java源文件:使用文本编辑器(Edit或记事本),拓展名为.java(2)编译Java源文件:使用Java编译器(javac.exe)。
得到字节码文件*.class(3)运行Java程序:Java应用程序使用Java解释器(java.exe)执行字节码文件;Java小应用程序使用支持Java标准的浏览器来执行。
2. 怎样区分应用程序和小应用程序?应用程序的主类或小应用程序的主类必须用public修饰吗?答:①应用程序必须有main方法,这个方法是程序执行的入口。
小应用程序没有main方法。
②应用程序的主类不一定用public修饰;小应用程序的主类必须用public修饰。
3. Java程序是由什么组成的?一个程序中必须要有public类吗?Java源文件的命名规则是怎样的?答:①Java程序由类组成。
②应用程序可以没有public类;小应用程序一定有一个类是public类(主类)。
③应用程序:如果只有一个类,源文件名与该类的类名相同,拓展名为.java;有多个类时,如果有public类(最多一个),源文件名与public类的类名相同,拓展名是.java;没有public类,源文件名与任何一个类的类名相同即可,拓展名为.java。
小应用程序:源文件名与主类的类名相同,拓展名是.java。
4. 在运行小程序的HTML文件中可以使用codebase属性指定小程序的字节码所驻留的目录。
如果不使用codebase属性,小程序的字节码文件必须和运行它的HTML文件在同一目录中。
编写一个小程序并将小程序的字节码存放在某个目录中,比如C:\5000;把运行该小程序的HTML文件(注意其中的codebase属性): <applet code=你的小程序的字节码 width=200 height=300 codebase=C:\5000></applet>存放在另一个目录中。
第3章类与对象习题参考答案一、选择题(共30分,每题1分)二、填空题(共18分,每题1分)1. 不能2. 将对象A复制给对象B3. (1) public (2) 成员函数4. 实例5. 复制(拷贝)6. 类(test )~test()7. 对象类8. 重载返回值参数9.默认(无参)10. ->11. 构造函数12.函数返回类型类名::成员函数名(参数表);13. 常对象14. 对象名15. 析构函数三、改错题(共12分,每题2分)1. void Point(int a)------------Point(int a)cout<<A.Show();----------- A.Show();2. 答案:int i, int j-----------int i, int j=0 //注:只要有一个int类型的数据就行。
分析:调用时,既有一个参数,也有两个参数,且没有重载,所以参数需要带默认值。
3. 答案:swap(&a,&b); ------------swap(a, b);分析函数的形参是变量的引用,调用时的实参应该是地址。
4. #include<iostream.h>class one{ int a1,a2;public:one(int x1=0, int x2=0) //修改1:构造函数的函数体没有{a1=x1;a2=x2;}show() //修改2 定义成员函数{cout<<a1<<endl;cout<<a2<<endl;}};void main(){ one data(2,3);data.show(); //修改3:用对象调用成员函数}5. ABC(int aa)a(aa){} ------------ABC(int aa):a(aa){}分析:构造函数的初始化列表格式错误。
6. 答案:cout<<t1.getmin()<<endl; -----------cout<<t1.GetMin()<<endl;分析:采用默认的访问权限即私有的,在外部无法访问。
四、看程序写结果(共15分,每题3分)1.输出:Constructing normallyConstructing with a number:59Display a number:0Display a number:59DestructingDestructing2.s=1503.62[解析]x是普通对象,调用普通的print函数;而y常对象,调用常成员函数。
4.答案:108[解析]p指向对象x2,x2.getA()+5该值为8 即x2.a=8;10+x1.getA()为10,x1.a=10。
5. 38五、编程题(共25分)1.某商店经销一种货物,货物成箱购进,成箱卖出,购进和卖出时以重量为单位,各箱的重量不一样,因此,商店需要记下目前库存货物的总量,要求把商店货物购进和卖出的情况模拟出来。
#include<iostream>using namespace std;class Goods{double weight;static double totalweight;public:Goods(double w){weight=w;totalweight+=weight;}~Goods(){totalweight-=weight;}static double getTotalWeight(){return totalweight;}};double Goods::totalweight=0;void main(){Goods *g1,*g2;g1=new Goods(10.0); //买进货物,增加总重量g2=new Goods(20.0);cout<<"总重量"<<Goods::getTotalWeight()<<endl;delete g1;cout<<"卖掉一个以后的总重量"<<Goods::getTotalWeight()<<endl;delete g2;cout<<"再卖掉一个后的总重量"<<Goods::getTotalWeight()<<endl;}2.声明一个长方形Box,该类有长(length)、宽(width)、高(height)三个数据成员,类中有获取及修改、宽、高的函数,以及计算长方形表面积和体积的函数,声明默认的构造函数和带有3个参数的构造函数。
在main函数中进行测试。
#include <iostream>//包含头文件命令using namespace std;//使用名字空间stdclass Box{public:Box(){ length=1; width=1; height=1; } //默认构造函数Box(int length, int width, int height): length(length), width(width), height(height){}//普通构造函数int GetLength(){ return length;} //获取长方体的长度int GetWidth(){ return width;} //获取长方体的宽度int GetHeight(){ return height;} //获取长方体的高度void SetLength(int length){ this->length = length; } //修改长方体的长度void SetWidth(int width){ this->width = width; } //修改长方体的宽度void SetHeight(int height){ this->height = height; } //修改长方体的高度int GetArea() //计算长方体的表面积{ return 2*(length * width + length * height + width * height); }int GetV olume(){ return length * width * height; } //计算长方体的体积private:int length, width, height; //长方体的长、宽、高};int main(){Box box1,box2(2,1,3);box1.SetLength(5);box1.SetWidth(3);box1.SetHeight(4);cout<<"The area of box1 is: "<< box1.GetArea()<<endl;cout<<"The volume of box1 is: "<< box1.GetV olume()<<endl;cout<<"The area of box2 is: "<< box2.GetArea()<<endl;cout<<"The volume of box2 is: "<< box2.GetV olume()<<endl;return 0;}3.创建一个对象数组,数组的元素是学生对象,学生的信息包括学号、姓名和成绩,在main(设有5位学生,进行数据测试)。
函数中将数组中所有成绩大于80分的学生的信息显示出来。
程序代码如下:#include <iostream>//包含头文件命令using namespace std;//使用名字空间std#include <string>class Student{public:Student(){ sno=""; name=""; score=0; } //默认构造函数Student(string sno, string name, int score) //普通构造函数: sno(sno), name(name), score(score){}string GetSno(){ return sno; } //获取学生学号string GetName(){ return name; } //获取学生姓名int GetScore(){ return score; } //获取学生成绩void SetSno(string sno){ this->sno = sno; } //修改学生学号void SetName(string name){ this->name = name; } //修改学生姓名void SetScore(int score){ this->score = score; } //修改学生成绩void Show() //显示学生信息{ cout<<"Sno is: "<<sno<<endl;cout<<"Name is: "<<name<<endl;cout<<"Score is: "<<score<<endl<<endl;}private:string sno; //学号string name; //姓名int score; //成绩};int main(){Student student[5] = {Student("1001", "ZhangSan", 75),Student("1002", "LiSi", 81),Student("1003", "WangWu", 90),Student("1004", "ZhaoLiu", 71),Student("1005", "HouQi", 88) };for(int i = 0; i < 5; i++)if(student[i].GetScore()>80) student[i].Show();return 0;}。