面向对象程序设计期末复习题及答案1.docx

上传人:b****6 文档编号:4435295 上传时间:2022-12-01 格式:DOCX 页数:94 大小:64.81KB
下载 相关 举报
面向对象程序设计期末复习题及答案1.docx_第1页
第1页 / 共94页
面向对象程序设计期末复习题及答案1.docx_第2页
第2页 / 共94页
面向对象程序设计期末复习题及答案1.docx_第3页
第3页 / 共94页
面向对象程序设计期末复习题及答案1.docx_第4页
第4页 / 共94页
面向对象程序设计期末复习题及答案1.docx_第5页
第5页 / 共94页
点击查看更多>>
下载资源
资源描述

面向对象程序设计期末复习题及答案1.docx

《面向对象程序设计期末复习题及答案1.docx》由会员分享,可在线阅读,更多相关《面向对象程序设计期末复习题及答案1.docx(94页珍藏版)》请在冰豆网上搜索。

面向对象程序设计期末复习题及答案1.docx

面向对象程序设计期末复习题及答案1

C++面向对象程序设计复习

试题类型1、单项选择题(在每小题的四个备选答案中,选出一个正确答案,并将正确答案的序号填在题干的括号内。

15题,每小题2分,共30分)[主要从作业题目中抽出来]

2.填空题。

(10题,每小题3分,共30分)

3、阅读程序,写出程序运行结果。

【也称计算题】(3题,每小题5分,共15分)

4、程序编制题【也称综合分析题】。

(第1、2题每题8分,第3题9分,共25分)重点复习内容

打*号是重点,打▲号是编程题出题范围

*基本概念,对象,消息,类。

面向对象系统特性,封装性,继承性,多态性。

*▲C++类的构成,类与对象,构造与析构,动态存储,类嵌套。

静态成员,对象数组,友元。

*函数重载。

运算符重载。

*引用定义与引用参数

*基类与派生类的定义。

*基类及派生类的访问权(含派生类对基类的访问、通过派生类对象对基类的访问)和初始化。

多继承与虚基类。

*多态性与虚函数。

纯虚函数、抽象类。

*▲函数模板。

*▲使用类来定义对象并在程序中的应用题型样题

填空题1.假定AB为一个类,则执行“ABa[10];”语句时,系统自动调用该类的构造函数的次数为_________。

答案:

10

2.可以用p.a的形式访问派生类对象P的基类成员a,其中a是_________。

答案:

公有继承的公有成员

3.能作为重载函数的调用的依据是_________。

答案:

参数个数、参数类型

4.在进行完任何C++流的操作后,都可以用C++流的有关成员函数检测流的状态;其中只能用于检测输入流是否结束状态的操作函数名称是_________

答案:

eof

5.函数重载是指_________。

答案:

两个或两个以上的函数取相同的函数名,但形参的个数或类型不同

6.在派生类中重新定义虚函数时必须在_________方面与基类保持一致。

答案:

参数个数

阅读程序例题【计算题】

1.分析以下程序的执行结果

#include

classSample

{

intx,y;

public:

Sample(){x=y=0;}

Sample(inta,intb){x=a;y=b;}

~Sample()

{

if(x==y)

cout<<“x=y”<

else

cout<<“x!

=y”<

}

voiddisp()

{

cout<<“x=”<

}

};

voidmain()

{

Samples1,s2(2,3);

s1.disp();

s2.disp();

}

解:

x=0,y=0

x=2,y=3

x!

=y

x=y

2.分析以下程序的执行结果

#include

intadd(intx,inty)

{

returnx+y;

}

intadd(intx,inty,intz)

{

returnx+y+z;

}

voidmain()

{

inta=4,b=6,c=10;

cout<

}

解:

10,203.分析以下程序执行结果

#include

intadd(intx,inty)

{

returnx+y;

}

doubleadd(doublex,doubley)

{

returnx+y;

}

voidmain()

{

inta=4,b=6;

doublec=2.6,d=7.4;

cout<

}

解:

10,10

4.分析以下程序执行的结果

#include

classSample

{

intx,y;

public:

Sample(){x=y=0;}

Sample(inta,intb){x=a;y=b;}

voiddisp()

{

cout<<"x="<

}

};

voidmain()

{

Samples1,s2(1,2),s3(10,20);

Sample*pa[3]={&s1,&s2,&s3};

for(inti=0;i<3;i++)

pa[i]->disp();

}

解:

x=0,y=0

x=1,y=2

x=10,y=205.分析以下程序的执行结果:

#include

classbase

{

intn;

public:

base(){};

base(inta)

{

cout<<"constructingbaseclass"<

n=a;

cout<<"n="<

}

~base(){cout<<"destructingbaseclass"<

};

classsubs:

publicbase

{

intm;

public:

subs(inta,intb):

base(a)

{

cout<<"constructingsubclass"<

m=b;

cout<<"m="<

}

~subs(){cout<<"destructingsubclass"<

};

voidmain()

{

subss(1,2);

}

解:

constructingbaseclass

n=1

constructingsubclass

m=2

destructingsubclass

destructingbaseclass

6.分析以下程序的执行结果:

#include

classSample

{

protected:

intx;

public:

Sample(){x=0;}

Sample(intval){x=val;}

voidoperator++(){x++;}

};

classDerived:

publicSample

{

inty;

public:

Derived():

Sample(){y=0;}

Derived(intval1,intval2):

Sample(val1){y=val2;}

voidoperator--(){x--;y--;}

voiddisp()

{

cout<<"x="<

}

};

voidmain()

{

Derivedd(3,5);

d.disp();

d++;

d.disp();

d--;

d--;

d.disp();

}

解:

x=3,y=5

x=4,y=5

x=2,y=3

7分析以下程序执行结果:

#include

classA

{

public:

A(char*s){cout<

~A(){}

};

classB:

publicA

{

public:

B(char*sl,char*s2):

A(sl)

{

cout<

}

};

classC:

publicA

{

public:

C(char*sl,char*s2):

A(sl)

{

cout<

}

};

classD:

publicB,publicC

{

public:

D(char*sl,char*s2,char*s3,char*s4):

B(sl,s2),C(sl,s3)

{

cout<

}

};

voidmain()

{

Dd("classA","classB","classC","classD");

}

解:

classA

classB

classA

classC

classD补充例题

1.分析以下程序的执行结果

#include

template

Tmax(Tx,Ty)

{return(x>y?

x:

y);}

voidmain()

{cout<

解答:

5,3.52.分析以下程序的执行结果

#include

voidmain()

{

inta[]={10,20,30,40},*pa=a;

int*&pb=pa;

pb++;

cout<<*pa<

}

解答:

输出为:

203.分析以下程序的执行结果

#include

template

Tabs(Tx)

{return(x>0?

x:

-x);}

voidmain()

{cout<

解答:

输出为:

3,2.6

4.分析以下程序的执行结果

#include

classSample

{

charc1,c2;

public:

Sample(chara){c2=(c1=a)-32;}

voiddisp()

{cout<

};

voidmain()

{

Samplea('a'),b('b');

a.disp();

b.disp();

}

解答:

a转换为A

b转换为B5.分析以下程序的执行结果

#include

voidmain()

{

inta;

int&b=a;//变量引用

b=10;

cout<<“a=”<

}

解答:

输出为:

a=106.分析以下程序的执行结果

#include

classSample

{

intx;

public:

Sample(){};

Sample(inta){x=a;}

Sample(Sample&a){x=a.x+++10;}

voiddisp(){cout<<“x=”<

};

voidmain()

{Samples1

(2),s2(s1);

s1.disp();

s2.disp();

}

解答:

x=3//++运算的结果

x=12//2+10

7.分析以下程序的执行结果

#include

classSample

{

intx;

public:

Sample(){};

Sample(inta){x=a;}

Sample(Sample&a){x=a.x+1;}

voiddisp(){cout<<“x=”<

};

voidmain()

{Samples1

(2),s2(s1);

s2.disp();

}

解答:

输出为:

x=3。

程序编制题例题【综合分析题】

例1,写出一个梯形类,操作有求面积和周长

分析:

由于要求梯形的面积和周长,那就要为梯形提供上底,下底,高,左边长,右边长等属性。

因此,梯形类描述为:

Classechelon

{

Inttop,bottom,height,llength,rlength;

Public:

Echelon(){。

}//构造函数

IntArea(){。

}//求面积

IntPerimeter(){。

}//求周长

}2.设计一个圆类circle和一个桌子类table,另设计一个圆桌类roundtable,它是从前两个类派生的,要求输出一个圆桌的高度、面积和颜色等数据。

解:

circle类包含私有数据成员radius和求圆面积的成员函数getarea();

table类包含私有数据成员height和返回高度的成员函数getheight()。

roundtable类继承所有上述类的数据成员和成员函数,添加了私有数据成员color和相应的成员函数。

本题程序如下:

#include

#include

classcircle

{

doubleradius;

public:

circle(doubler){radius=r;}

doublegetarea(){returnradius*radius*3.14;}

};

classtable

{

doubleheight;

public:

table(doubleh){height=h;}

doublegetheight(){returnheight;}

};

classroundtable:

publictable,publiccircle

{

char*color;

public:

roundtable(doubleh,doubler,charc[]):

circle(r),table(h)

{

color=newchar[strlen(c)+1];

strcpy(color,c);

}

char*getcolor(){returncolor;}

};

voidmain()

{

roundtablert(0.8,1.2,黑色);

cout<<圆桌属性数据:

<

cout<<高度:

<

cout<<面积:

<

cout<<颜色:

<

}

3.编写程序,定义一个类test,其成员数据及函数要求如下:

(1)私有数据成员intdata

(2)构造函数两个test()及test(intd),前者将(1)中的数据成员data值设为0;后者将(1)中的数据成员data设定为指定值d

(3)成员函数intsetdate()能在键盘读入一个数值,然后将该数值赋给data4.定义一个抽象类tea代表茶叶,它有1个double类型的保护数据成员cost代表种植成本,它还有一个纯虚函数price用来计算售价:

doubleprice(void)函数返回值为茶叶的售价。

由tea派生出具体类blacktea(红茶),要求如下:

(1)类中定义保护成员数据doubleo_cost,表示红茶的经营成本

(2)定义构造函数blacktea(doublebtc,doublebto_c),将cost和o_cost,数据成员设定为指定值

(3)重载price计算出blacktea的售价。

(假设:

blacktea售价=(cost+o_cost)*1.2)

5.编写一个程序,输入N个学生数据,包括学号、姓名、成绩,要求输出这些学生数据并计算平均分。

分析:

设计一个学生类Stud,除了包括no(学号)、name(姓名)和deg(成绩)数据成员外,有两个静态变量sum和num,分别存放总分和人数,另有两个普通成员函数setdata()和disp(),分别用于给数据成员赋值和输出数据成员的值,另有一个静态成员函数avg(),它用于计算平均分。

在main()函数中定义了一个对象数组用于存储输入的学生数据。

本题程序如下:

#include

#include

#defineN3

classStud

{

intno;

charname[10];

intdeg;

staticintnum;

staticintsum;

public:

voidsetdata(intn,charna[],intd)

{

no=n;deg=d;

strcpy(name,na);

sum+=d;

num++;

}

staticdoubleavg()

{

returnsum/num;

}

voiddisp()

{

printf(%-5d%-8s%3d\n,no,name,deg);

}

};

intStud:

:

sum=0;

intStud:

:

num=0;

voidmain()

{

Studst[N];

inti,n,d;

charna[10];

for(i=0;i

{

printf(输入学号姓名成绩:

);

scanf(%d%s%d,&n,na,&d);

st[i].setdata(n,na,d);

}

printf(输出数据\n);

printf(学号姓名成绩\n);

for(i=0;i

st[i].disp();

printf(平均分=%g\n\n,Stud:

:

avg());

}

本程序的执行结果如下:

输入学号姓名成绩:

1stud189

输入学号姓名成绩:

2stud278

输入学号姓名成绩:

3stud84

输出数据

学号姓名成绩

1stud189

2stud278

3stud384

平均分=83

6.请编写一个程序,以实现在屏幕上显示如下的乘法表。

1)1

2)24

3)369

4)481216

5)510152025

6)61218243036

7)7142128354249

8)816243240485664

9)918273645546372817.P463-P464函数模板

需要掌握的内容

面向对象程序设计的三大特征

类和对象

类:

C++的一种数据类型,使用类的变量则称为对象。

C++的类是对象的抽象,是进行封装和数据隐藏的工具,包括:

数据成员和成员函数。

一个类可以声明多个对象,对象之间代码共享,数据独立。

C++类的说明

public:

可被本类以外的函数访问,是类与外部的接口;

private:

只能被该类成员函数和友元函数存取和调用;

protected:

可被本类和本类的派生类的成员函数访问,用于类的继承。

成员函数

默认时在类中定义的项都是私有的,类成员函数的外部实现:

使用对象名引用对象的公有成员函数。

方法如下:

对象名.成员函数名(参数列表)

内联函数的概念;定义内联函数的两种格式

1)函数体放在类体内

2)函数体放在类体外,使用inline关键字

构造函数

构造函数的作用是在对象被创建时为对象分配内存空间,对类的数据成员初始化并执行对象的其他内部管理操作。

构造函数与类同名

构造函数可接收参数但不能有返回值,允许重载。

当创建一个类的对象时,系统会自动调用类的构造函数。

若未给类定义构造函数,则编译系统将为该类生成一个默认的构造函数,它没有参数,只简单地把对象中的每个实例变量初始化为0。

析构函数一、C++语言概述

  1.了解C++语言的基本符号。

  2.了解C++语言的词汇(保留字、标识符、常量、运算符、标点符号等)。

  3.掌握C++程序的基本框架(结构程序设计框架、面向对象程序设计框架等)。

  4.能够使用VisualC++6.0集成开发环境编辑、编译、运行与调度程序。

 

二、数据类型、表达式和基本运算

  1.掌握C++数据类型(基本类型,指针类型)及其定义方法。

  2.了解C++的常量定义(整型常量,字符常量,逻辑常量,实型常量,地址常量,符号常量)。

  3.掌握变量的定义与使用方法(变量的定义及初始化,全局变量,局部变量)。

  4.掌握C++运算符的种类、运算优先级和结合性。

  5.熟练掌握C++表达式类型及求值规则(赋值运算,算术运算符和算术表达式,关系运算符和关系表达式,逻辑运算符和逻辑表达式,条件运算,指针运算,逗号表达式)。

三、C++的基本语句

  1.掌握C++的基本语句,例如赋值语句、表达式语句、复合语句、输入、输出语句和空格语句等。

  2.用if语句实现分支结构。

  3.用switch语句实现多分支选择结构。

  4.用for语句实现循环结构。

  5.用while语句实现循环结构。

  6.用do…while语句实现循环结构。

  7.转向语句(goto,continue,break和return)。

  8.掌握分支语句和循环语句的各种嵌套使用。

四、数组、指针与引用

  1.掌握一维数组的定义、初始化和访问,了解多维数组的定义、初始化和访问。

  2.了解字符串与字符数组。

  3.熟练掌握常用字符串函数(strlen,strcpy,streat,strcmp,strstr等)。

  4.指针与指针变量的概念,指针与地址运算符,指针与数组。

  5.引用的基本概念,引用的定义与使用。

注意事项:

搞清楚指针与地址运算符的区别,指针与引用的区别。

五、掌握函数的有关使用

  1.函数的定义方法和调用方法。

  2.函数的类型和返回值。

  3.形式参数与实在参数,参数值的传递。

  4.变量的作用域、生存周期和存储类别(自动、静态、寄存器,外部)。

  5.递归函数。

  6.内联函数。

  7.带有缺省参数值的函数。

  

注意事项:

C++中,函数之间传递参数有传值和传地址两种传递方式。

六、熟练掌握类与对象的相关知识

  1.类的定义方式、数据成员、成员函数及访问权限(public,private,protected)。

  2.对象和对象指针的定义与使用。

  3.构造

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

当前位置:首页 > 高等教育 > 艺术

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1