C++面向对象程序设计习题解答.docx

上传人:b****3 文档编号:10331787 上传时间:2023-05-25 格式:DOCX 页数:47 大小:30.05KB
下载 相关 举报
C++面向对象程序设计习题解答.docx_第1页
第1页 / 共47页
C++面向对象程序设计习题解答.docx_第2页
第2页 / 共47页
C++面向对象程序设计习题解答.docx_第3页
第3页 / 共47页
C++面向对象程序设计习题解答.docx_第4页
第4页 / 共47页
C++面向对象程序设计习题解答.docx_第5页
第5页 / 共47页
C++面向对象程序设计习题解答.docx_第6页
第6页 / 共47页
C++面向对象程序设计习题解答.docx_第7页
第7页 / 共47页
C++面向对象程序设计习题解答.docx_第8页
第8页 / 共47页
C++面向对象程序设计习题解答.docx_第9页
第9页 / 共47页
C++面向对象程序设计习题解答.docx_第10页
第10页 / 共47页
C++面向对象程序设计习题解答.docx_第11页
第11页 / 共47页
C++面向对象程序设计习题解答.docx_第12页
第12页 / 共47页
C++面向对象程序设计习题解答.docx_第13页
第13页 / 共47页
C++面向对象程序设计习题解答.docx_第14页
第14页 / 共47页
C++面向对象程序设计习题解答.docx_第15页
第15页 / 共47页
C++面向对象程序设计习题解答.docx_第16页
第16页 / 共47页
C++面向对象程序设计习题解答.docx_第17页
第17页 / 共47页
C++面向对象程序设计习题解答.docx_第18页
第18页 / 共47页
C++面向对象程序设计习题解答.docx_第19页
第19页 / 共47页
C++面向对象程序设计习题解答.docx_第20页
第20页 / 共47页
亲,该文档总共47页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

C++面向对象程序设计习题解答.docx

《C++面向对象程序设计习题解答.docx》由会员分享,可在线阅读,更多相关《C++面向对象程序设计习题解答.docx(47页珍藏版)》请在冰点文库上搜索。

C++面向对象程序设计习题解答.docx

C++面向对象程序设计习题解答

第1章面向对象的方法学

1.什么是面向对象方法学?

解:

面向对象方法学就是尽量模拟人类习惯的思维方式,使软件开发的方法与过程尽可能接近人类认识世界、解决问题的方法与过程,从而使描述问题的问题空间(即问题域)与实现解法的解空间(即求解域)在结构上尽可能一致。

2.什么是对象?

它与传统的数据有何关系?

有什么不同?

解:

对象是封装了数据结构及可以施加在这些数据结构上的操作的封装体。

它与传统数据有本质的不同,传统数据是被动地等待对它进行处理,对象是进行处理的主体。

3.什么是封装性和继承性?

解:

封装是面向对象方法的一个重要特点,即将对象的属性和行为封装在对象的内部,形成一个独立的单位,并尽可能隐蔽对象的内部细节。

继承性是子类自动共享父类数据结构和方法的机制,这是类之间的一种关系。

4.什么是多态性?

解:

多态性是面向对象方法的重要特征。

不同的对象,收到同一消息可以产生不同的结果,这种现象称为多态性。

5.试写出学生管理系统中所涉及的类(属性和方法)。

学生管理系统中学生信息有:

姓名、学号、年龄、成绩;学生管理系统完成学生信息输入、学生信息输出、插入学生信息、删除学生信息、查找学生信息。

解:

classStudent

{

private:

charcName[12];//姓名

longlNum;//学号

intage;//年龄

floatfGrade;//成绩

public:

voidInput();//输入学生信息

voidPrint();//输出学生信息

voidInsert();//插入学生信息

voidDel();//删除学生信息

voidFind();//查找学生信息

};

6.目前常用的面向对象程序设计语言有哪些?

各有哪些特点?

解:

VisualC++6.0支持面向对象编程、可视化、模块化、代码可重用和组件共享等技术,可以大大提高软件系统的设计、管理和开发速度。

Java语言是一种通用、并发、基于类的面向对象程序设计语言。

Java语言具有简捷性、面向对象、分布式、健壮性、安全性、可移植性、解释型、高性能、多线程、动态性等特点。

C#(读做“Csharp”)是微软公司发布的一种面向对象的、运行于.NETFramework之上的高级程序设计语言。

C#集C语言的简洁强大、C++的面向对象、VB的图形化设计方法、Java的编译与执行机制等优点于一身。

C#是创新性的新式编程语言,它巧妙地结合了最常用的行业语言和研究语言中的功能,并引入了多种潜在的新功能,提高了开发人员在语言构造方面的效率,将快速的应用程序开发与对底层平台各种功能的访问紧密结合在一起,使得程序员能够在.NET平台上快速开发各种应用程序。

7.C++支持多态性主要表现在哪些方面?

解:

C++支持两种多态性,即编译时的多态性和运行时的多态性。

编译时的多态性是通过重载来实现的,运行时的多态性是通过虚函数来实现的。

思考题

1.设计一个栈类,实现的操作有初始化栈、入栈、出栈、判栈空。

解:

classStack

{

private:

inttop;

ints[100];

public:

voidIni_Stack();//初始化栈

voidPush_Stack();//入栈

voidPop_Stack();//出栈

voidEmpty();//判栈空

};

2.设计一个队列类,实现的操作有初始化队列、入队、出队、判队空。

解:

classQueue

{

private:

intfront,rear;

intque[100];

public:

voidIni_Queue();//初始化队列

voidIn_Queue();//入队

voidOut_Queue();//出队

voidEmpty();//判队空

};

第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

Destructing

思考题

1.定义一个学生类,学生信息有学号、姓名和成绩。

成绩包括计算机、英语、数学成绩和平均分。

要求利用队列实现学生的入队、出队和显示等功能。

constintMAXSIZE=5;//queue.h

structdatatype

{

longno;

charname[10];

floatscore;

};

classStudent

{

private:

datatypedata[MAXSIZE];

intfront,rear;

intnum;

public:

Student();

intIn_SeQueue(datatypex);

intOut_SeQueue();

voidPrint_SeQueue();

};

//queue.cpp

#include"iostream"

usingnamespacestd;

#include"queue.h"

int_tmain(intargc,_TCHAR*argv[])

{

Studentsq;

inti;

for(i=1;i<=3;i++)

{

datatypestu;

cout<<"inputno,name,score"<

cin>>stu.no>>stu.name>>stu.score;

sq.In_SeQueue(stu);

}

cout<<"Print_SeQueue"<

sq.Print_SeQueue();

sq.Out_SeQueue();

cout<<"AfterOut_SeQueue"<

sq.Print_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);

}

}

intStudent:

:

Out_SeQueue()

{

if(num==0)

{

return-1;

}

else

{

front=(front+1)%MAXSIZE;

num--;

return1;

}

}

voidStudent:

:

Print_SeQueue()

{

inti;

intnumber=num;

for(i=(front+1)%MAXSIZE;number>0;number--,i=(i+1)%MAXSIZE)

cout<

}

2.定义一个图书类,图书信息有图书名称、作者、出版社、价格。

要求利用栈实现图书的入库、出库和显示等功能。

constintMAXSIZE=5;//stack.h

structdatatype

{

charname[10],author[10],publish[20];

floatprice;

};

classStack

{

private:

datatypedata[MAXSIZE];

inttop;

public:

Stack();

intPush_SeqStack(datatypex);

intPop_SeqStack();

voidPrint_SeqStack();

};

//stack.cpp

#include"iostream"

usingnamespacestd;

#include"stack.h"

int_tmain(intargc,_TCHAR*argv[])

{

Stacksq;

inti;

for(i=1;i<=3;i++)

{

datatypeb;

cout<<"inputname,author,publish,price"<

cin>>b.name>>b.author>>b.publish>>b.price;

sq.Push_SeqStack(b);

}

cout<<"Print_SeqStack"<

sq.Print_SeqStack();

sq.Pop_SeqStack();

cout<<"AfterPop"<

sq.Print_SeqStack();

return0;

}

Stack:

:

Stack()

{

top=-1;

}

intStack:

:

Push_SeqStack(datatypex)

{

if(top==MAXSIZE-1)

{

return(0);

}

else

{

top++;

data[top]=x;

return

(1);

}

}

intStack:

:

Pop_SeqStack()

{

if(top==-1)

{

return0;

}

else

{

top--;

return1;

}

}

voidStack:

:

Print_SeqStack()

{

inti;

for(i=0;i<=top;i++)

cout<

}

3.有Distance类和Point类,将Distance类定义为Point类的友元类来实现计算两点之间距离。

//point.h

classDistance;

classPoint

{

public:

Point(intxx=0,intyy=0)

{

X=xx;

Y=yy;

}

friendclassDistance;

private:

intX,Y;

};

classDistance

{

public:

floatfDist(Pointa,Pointb);

};

//point.cpp

#include"iostream"

#include"math.h"

usingnamespacestd;

#include"point.h"

#include"math.h"

int_tmain(intargc,_TCHAR*argv[])

{

Pointmyp1(1,1),myp2(4,5);

Distanced;

cout<<"Thedistanceis:

";

cout<

return0;

}

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.利用重载求两个整数、三个整数和四个整数的最小值。

#include"iostream"

usingnamespacestd;

intMin(intx1,intx2);

intMin(intx1,intx2,intx3);

intMin(intx1,intx2,intx3,intx4);

intmain()

{

intx1,x2,x3,x4;

cout<<"inputx1,x2,x3,x4"<

cin>>x1>>x2>>x3>>x4;

cout<

cout<

cout<

return0;

}

intMin(intx1,intx2)

{

return(x1

x1:

x2);

}

intMin(intx1,intx2,intx3)

{

inty;

y=x1

x1:

x2;

return(y

y:

x3);

}

intMin(intx1,intx2,intx3,intx4)

{

inty1,y2;

y1=x1

x1:

x2;

y2=x3

x3:

x4;

return(y1

y1:

y2);

}

2.利用重载计算长方形、正方形、圆、梯形的面积和体积。

#include"iostream"

usingnamespacestd;

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);

intmain()

{

floatx,y,z,x1,y1;

constfloatPI=3.14;

cout<<"---------计算面积---------"<

cout<<"输入长、宽"<

cin>>x>>y;

cout<<"长方形的面积是:

"<

cout<<"输入边长"<

cin>>x;

cout<<"正方形的面积是:

"<

cout<<"输入半径"<

cin>>x;

cout<<"圆的面积是:

"<

cout<<"输入上底、下底及高"<

cin>>x>>y>>z;

cout<<"梯形的面积是:

"<

cout<<"---------计算体积---------"<

cout<<"输入长、宽和高"<

cin>>x>>y>>z;

cout<<"长方形的体积是:

"<

cout<<"输入边长"<

cin>>x;

cout<<"正方形的体积是:

"<

cout<<"输入半径"<

cin>>x;

cout<<"圆的体积是:

"<

cout<<"输入上底边长a、b,下底边长a1、b1,以及高"<

cin>>x>>y>>x1>>y1>>z;

cout<<"梯形的体积是:

"<

return0;

}

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个实数的排序。

#include"iostream"

usingnamespacestd;

voidsort(inta[],intn);

voidsort(floata[],intn);

intmain()

{

constintn=10;

inti,a[n];

floatb[n];

cout<<"输入"<

for(i=0;i

cin>>a[i];

sort(a,n);

cout<<"排序结果为:

"<

for(i=0;i

cout<

cout<

cout<<"输入"<

for(i=0;i

cin>>b[i];

sort(b,n);

cout<<"排序结果为:

"<

for(i=0;i

cout<

cout<

return0;

}

voidsort(inta[],intn)

{

inti,j,t;

for(i=0;i

{

for(j=i+1;j

if(a[i]

{

t=a[i];

a[i]=a[j];

a[j]=t;

}

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2