11427C++面向对象程序设计习题答案Word下载.docx
《11427C++面向对象程序设计习题答案Word下载.docx》由会员分享,可在线阅读,更多相关《11427C++面向对象程序设计习题答案Word下载.docx(60页珍藏版)》请在冰豆网上搜索。
6.目前常用的面向对象程序设计语言有哪些?
各有哪些特点?
VisualC++6.0支持面向对象编程、可视化、模块化、代码可重用和组件共享等技术,可以大大提高软件系统的设计、管理和开发速度。
Java语言是一种通用、并发、基于类的面向对象程序设计语言。
Java语言具有简捷性、面向对象、分布式、健壮性、安全性、可移植性、解释型、高性能、多线程、动态性等特点。
C#(读做“Csharp”)是微软公司发布的一种面向对象的、运行于.NETFramework之上的高级程序设计语言。
C#集C语言的简洁强大、C++的面向对象、VB的图形化设计方法、Java的编译与执行机制等优点于一身。
C#是创新性的新式编程语言,它巧妙地结合了最常用的行业语言和研究语言中的功能,并引入了多种潜在的新功能,提高了开发人员在语言构造方面的效率,将快速的应用程序开发与对底层平台各种功能的访问紧密结合在一起,使得程序员能够在.NET平台上快速开发各种应用程序。
7.C++支持多态性主要表现在哪些方面?
C++支持两种多态性,即编译时的多态性和运行时的多态性。
编译时的多态性是通过重载来实现的,运行时的多态性是通过虚函数来实现的。
思考题
1.设计一个栈类,实现的操作有初始化栈、入栈、出栈、判栈空。
classStack
inttop;
ints[100];
voidIni_Stack();
//初始化栈
voidPush_Stack();
//入栈
voidPop_Stack();
//出栈
voidEmpty();
//判栈空
2.设计一个队列类,实现的操作有初始化队列、入队、出队、判队空。
classQueue
intfront,rear;
intque[100];
voidIni_Queue();
//初始化队列
voidIn_Queue();
//入队
voidOut_Queue();
//出队
//判队空
第2章类与对象
1.构造函数和析构函数的主要作用是什么?
构造函数的功能是在创建对象时,给数据成员赋初值,即对象的初始化。
析构函数的功能是释放一个对象,在对象删除之前,用它来做一些内存释放等清理工作。
2.什么是this指针?
它的主要作用是什么?
this指针称为自引用指针。
每当对象调用成员函数时,系统就将该对象的地址赋给this指针,这时C++编译器将根据this指针所指向的对象来确定应该引用哪一个对象的数据成员。
3.什么是友元函数?
友元函数不是当前类中的成员函数,它可以是一个不属于任何一个类的一般函数(即非成员函数),也可以是另外一个类的成员函数。
4.什么是静态数据成员?
静态数据成员的定义和初始化方法是什么?
类的静态数据成员拥有一块单独的存储区,不管用户创建了多少个该类的对象,所有这些对象的静态数据成员都共享这一块静态存储空间,是这些对象互相通信的一种方法。
静态数据成员的定义格式:
static类型名静态成员名;
静态数据成员的初始化格式:
类型类名∷静态数据成员=初始化值;
5.关于构造函数的叙述正确的是(B)。
A.构造函数可以有返回值B.构造函数的名字必须与类名完全相同
C.构造函数必须带有参数D.构造函数必须定义,不能默认
6.关于析构函数特征描述正确的是(C)。
A.一个类中可以有多个析构函数B.析构函数名与类名完全相同
C.析构函数不能指定返回类型D.析构函数可以有一个或多个参数
7.构造函数是在(B)时被执行的。
A.程序编译B.创建对象C.创建类D.程序装入内存
8.定义A是一个类,那么执行语句“Aa,b(3),*p;
”调用了(A)次构造函数。
A.2B.3C.4D.5
9.在下列函数原型中,可以作为类Base析构函数的是(B)。
A.void~BaseB.~Base()C.~Base()constD.Base()
10.this指针是C++实现(B)的一种机制。
A.抽象B.封装C.继承D.重载
11.已知类中的一个成员函数说明为:
voidSet(X&
a)其中,X&
a的含义是(C)。
A.指向类X的指针为a
B.将a的地址赋给变量
C.a是类X的对象引用,用来作为Set()的形参
D.变量X与a按位与作为函数Set()的形参
12.下面关于友元函数的描述中,正确的说法是(A)。
A.友元函数是独立于当前类的外部函数
B.一个友元函数不能同时定义为两个类的友元函数
C.友元函数必须在类的外部定义
D.在外部定义友元函数时,必须加关键字friend
13.一个类的友元函数能够访问该类的(D)。
A.私有成员B.保护成员C.公有成员D.所有成员
14.友元的作用之一是(A)。
A.提高程序的运行效率B.加强类的封装性
C.实现数据的隐藏性D.增强成员函数的种类
15.n=15
16.s=10
17.
Constructing
10
Destructing
20
1.定义一个学生类,学生信息有学号、姓名和成绩。
成绩包括计算机、英语、数学成绩和平均分。
要求利用队列实现学生的入队、出队和显示等功能。
constintMAXSIZE=5;
//queue.h
structdatatype
longno;
charname[10];
floatscore;
classStudent
datatypedata[MAXSIZE];
intnum;
Student();
intIn_SeQueue(datatypex);
intOut_SeQueue();
voidPrint_SeQueue();
//queue.cpp
#include"
iostream"
usingnamespacestd;
queue.h"
int_tmain(intargc,_TCHAR*argv[])
Studentsq;
inti;
for(i=1;
i<
=3;
i++)
{
datatypestu;
cout<
<
"
inputno,name,score"
endl;
cin>
>
stu.no>
stu.name>
stu.score;
sq.In_SeQueue(stu);
}
cout<
Print_SeQueue"
sq.Print_SeQueue();
sq.Out_SeQueue();
AfterOut_SeQueue"
return0;
}
Student:
:
Student()
front=rear=MAXSIZE-1;
num=0;
intStudent:
In_SeQueue(datatypex)
if(num==MAXSIZE)
return(-1);
else
rear=(rear+1)%MAXSIZE;
data[rear]=x;
num++;
return
(1);
Out_SeQueue()
if(num==0)
return-1;
front=(front+1)%MAXSIZE;
num--;
return1;
voidStudent:
Print_SeQueue()
intnumber=num;
for(i=(front+1)%MAXSIZE;
number>
0;
number--,i=(i+1)%MAXSIZE)
data[i].no<
"
data[i].name<
data[i].score<
2.定义一个图书类,图书信息有图书名称、作者、出版社、价格。
要求利用栈实现图书的入库、出库和显示等功能。
//stack.h
charname[10],author[10],publish[20];
floatprice;
classStack
Stack();
intPush_SeqStack(datatypex);
intPop_SeqStack();
voidPrint_SeqStack();
//stack.cpp
stack.h"
Stacksq;
datatypeb;
inputname,author,publish,price"
b.name>
b.author>
b.publish>
b.price;
sq.Push_SeqStack(b);
Print_SeqStack"
sq.Print_SeqStack();
sq.Pop_SeqStack();
AfterPop"
Stack:
Stack()
top=-1;
intStack:
Push_SeqStack(datatypex)
if(top==MAXSIZE-1)
return(0);
top++;
data[top]=x;
Pop_SeqStack()
if(top==-1)
return0;
top--;
voidStack:
Print_SeqStack()
for(i=0;
=top;
data[i].name<
data[i].author<
data[i].publish<
data[i].price<
3.有Distance类和Point类,将Distance类定义为Point类的友元类来实现计算两点之间距离。
//point.h
classDistance;
classPoint
Point(intxx=0,intyy=0)
X=xx;
Y=yy;
friendclassDistance;
intX,Y;
classDistance
floatfDist(Pointa,Pointb);
//point.cpp
#include"
math.h"
point.h"
Pointmyp1(1,1),myp2(4,5);
Distanced;
Thedistanceis:
;
d.fDist(myp1,myp2)<
floatDistance:
fDist(Pointp1,Pointp2)
doublex,y;
x=p1.X-p2.X;
y=p1.Y-p2.Y;
returnfloat(sqrt(x*x+y*y));
第3章函数重载与内联函数
1.为什么要进行函数重载?
当函数实现的是同一类功能,只是部分细节不同(如参数的个数或参数类型不同)时,利用函数重载机制可以将这些函数取成相同的名字,从而使程序易于阅读和理解,方便记忆和使用。
2.什么是内联函数?
内联函数是一个函数,它与一般函数的区别是在使用时可以像宏一样展开,所以没有函数调用的开销。
因此,使用内联函数可以提高系统的执行效率。
3.函数重载的意义主要在于(A)。
A.使用方便,提高可读性B.提高执行效率
C.减少存储空间开销D.提高程序可靠性
4.下面关于重载函数的说法中正确的是(C)。
A.重载函数一定具有不同的返回值类型B.重载函数形参个数一定不同
C.重载函数一定有不同的形参列表D.重载函数名可以不同
5.一个函数功能不太复杂,但要求被频繁调用,选用(A)。
A.内联函数B.重载函数C.递归函数D.嵌套函数
6.将函数声明为内联函数的关键字是(C)。
A.registerB.staticC.inlineD.extern
7.在内联函数内允许使用的是(C)。
A.循环语句B.开关语句C.赋值语句D.以上都允许
8.在C++中,下列关于参数默认值的描述中正确的是(C)。
A.设置参数默认值时,应当全部设置
B.设置参数默认值后,调用函数不能再对参数赋值
C.设置参数默认值时,应当从右向左设置
D.只能在函数定义时设置参数默认值
9.74
10.13
1.利用重载求两个整数、三个整数和四个整数的最小值。
intMin(intx1,intx2);
intMin(intx1,intx2,intx3);
intMin(intx1,intx2,intx3,intx4);
intmain()
intx1,x2,x3,x4;
inputx1,x2,x3,x4"
cin>
x1>
x2>
x3>
x4;
Min(x1,x2)<
Min(x2,x3,x4)<
Min(x1,x2,x3,x4)<
intMin(intx1,intx2)
return(x1<
x2?
x1:
x2);
intMin(intx1,intx2,intx3)
inty;
y=x1<
x2;
return(y<
x3?
y:
x3);
intMin(intx1,intx2,intx3,intx4)
inty1,y2;
y1=x1<
y2=x3<
x4?
x3:
return(y1<
y2?
y1:
y2);
2.利用重载计算长方形、正方形、圆、梯形的面积和体积。
floatArea(floatx,floaty);
floatArea(floatx);
floatArea(floatr,constdoublepi);
floatArea(floata,floatb,floath);
floatVolumn(floata,floatb,floath);
floatVolumn(floata);
floatVolumn(floatr,constfloatpi);
floatVolumn(floata,floatb,floata1,floatb1,floath);
floatx,y,z,x1,y1;
constfloatPI=3.14;
---------计算面积---------"
输入长、宽"
x>
y;
长方形的面积是:
Area(x,y)<
输入边长"
x;
正方形的面积是:
Area(x)<
输入半径"
圆的面积是:
Area(x,PI)<
输入上底、下底及高"
y>
z;
梯形的面积是:
Area(x,y,z)<
---------计算体积---------"
输入长、宽和高"
长方形的体积是:
Volumn(x,y,z)<
正方形的体积是:
Volumn(x)<
圆的体积是:
Volumn(x,PI)<
输入上底边长a、b,下底边长a1、b1,以及高"
y1>
梯形的体积是:
Volumn(x,y,x1,y1,z)<
floatArea(floatx,floaty)
returnx*y;
floatArea(floatx)
returnx*x;
floatArea(floatr,constdoublepi)
returnpi*r*r;
floatArea(floata,floatb,floath)
return(a+b)*h/2;
floatVolumn(floata,floatb,floath)
returna*b*h;
floatVolumn(floata)
returna*a*a;
floatVolumn(floatr,constfloatpi)
return4*pi*r*r*r/3;
floatVolumn(floata,floatb,floata1,floatb1,floath)
returnh*(a*b+(a+a1)*(b+b1)+a1*b1)/6.0;
3.利用重载实现对10个整数和10个实数的排序。
voidsort(inta[],intn);
voidsort(floata[],intn);
constintn=10;
inti,a[n];
floatb[n];
输入"
n<
个整数"
n;
a[i];
sort(a,n);
排序结果为:
a[i]<
个实数"
b[i];
sort(b,n);
b[i]<
voidsort(inta[],intn)
inti,j,t;
for(i=0;
n-1;
for(j=i+1;
j<
j++)
if(a[i]<
a[j])
{
t=a[i];
a[i]=a[j];
a[j]=t;