面向对象程序设计期末复习题及答案Word文档格式.docx
《面向对象程序设计期末复习题及答案Word文档格式.docx》由会员分享,可在线阅读,更多相关《面向对象程序设计期末复习题及答案Word文档格式.docx(231页珍藏版)》请在冰豆网上搜索。
iostream.h>
classSample
{
intx,y;
public:
Sample(){x=y=0;
}
Sample(inta,intb){x=a;
y=b;
~Sample()
if(x==y)
cout<
<
“x=y”<
endl;
else
“x!
=y”<
voiddisp()
“x=”<
x<
“,y”=<
y<
};
voidmain()
Samples1,s2(2,3);
s1.disp();
s2.disp();
解:
x=0,y=0
x=2,y=3
x!
=y
x=y
2.分析以下程序的执行结果
intadd(intx,inty)
returnx+y;
intadd(intx,inty,intz)
returnx+y+z;
inta=4,b=6,c=10;
add(a,b)<
<
add(a,b,c)<
10,203.分析以下程序执行结果
doubleadd(doublex,doubley)
inta=4,b=6;
doublec=2.6,d=7.4;
"
"
add(c,d)<
10,10
4.分析以下程序执行的结果
Sample(){x=y=0;
Sample(inta,intb){x=a;
x="
y="
Samples1,s2(1,2),s3(10,20);
Sample*pa[3]={&
s1,&
s2,&
s3};
for(inti=0;
i<
3;
i++)
pa[i]->
disp();
x=1,y=2
x=10,y=205.分析以下程序的执行结果:
classbase
intn;
base(){};
base(inta)
cout<
"
constructingbaseclass"
<
endl;
n=a;
cout<
n="
n<
~base(){cout<
destructingbaseclass"
}
classsubs:
publicbase
intm;
subs(inta,intb):
base(a)
constructingsubclass"
m=b;
m="
m<
~subs(){cout<
destructingsubclass"
voidmain()
subss(1,2);
}
constructingbaseclass
n=1
constructingsubclass
m=2
destructingsubclass
destructingbaseclass
6.分析以下程序的执行结果:
#include<
protected:
intx;
Sample(){x=0;
Sample(intval){x=val;
voidoperator++(){x++;
classDerived:
publicSample
inty;
Derived():
Sample(){y=0;
Derived(intval1,intval2):
Sample(val1){y=val2;
voidoperator--(){x--;
y--;
cout<
x<
y<
Derivedd(3,5);
d.disp();
d++;
d.disp();
d--;
x=3,y=5
x=4,y=5
7分析以下程序执行结果:
classA
A(char*s){cout<
s<
~A(){}
classB:
publicA
B(char*sl,char*s2):
A(sl)
s2<
classC:
C(char*sl,char*s2):
classD:
publicB,publicC
D(char*sl,char*s2,char*s3,char*s4):
B(sl,s2),C(sl,s3)
s4<
Dd("
classA"
classB"
classC"
classD"
);
classB
classC
classD补充例题
1.分析以下程序的执行结果
template<
classT>
Tmax(Tx,Ty)
{return(x>
y?
x:
y);
{cout<
max(2,5)<
“,”<
max(3.5,2.8)<
解答:
5,3.52.分析以下程序的执行结果
inta[]={10,20,30,40},*pa=a;
int*&
pb=pa;
pb++;
*pa<
输出为:
203.分析以下程序的执行结果
Tabs(Tx)
0?
-x);
abs(-3)<
abs(-2.6)<
输出为:
3,2.6
4.分析以下程序的执行结果
charc1,c2;
Sample(chara){c2=(c1=a)-32;
c1<
“转换为”<
c2<
Samplea('
a'
),b('
b'
a.disp();
b.disp();
a转换为A
b转换为B5.分析以下程序的执行结果
inta;
int&
b=a;
//变量引用
b=10;
“a=”<
a<
a=106.分析以下程序的执行结果
Sample(){};
Sample(inta){x=a;
Sample(Sample&
a){x=a.x+++10;
voiddisp(){cout<
{Samples1
(2),s2(s1);
x=3//++运算的结果
x=12//2+10
7.分析以下程序的执行结果
a){x=a.x+1;
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和相应的成员函数。
本题程序如下:
string.h>
classcircle
doubleradius;
circle(doubler){radius=r;
doublegetarea(){returnradius*radius*3.14;
classtable
doubleheight;
table(doubleh){height=h;
doublegetheight(){returnheight;
classroundtable:
publictable,publiccircle
char*color;
roundtable(doubleh,doubler,charc[]):
circle(r),table(h)
color=newchar[strlen(c)+1];
strcpy(color,c);
char*getcolor(){returncolor;
roundtablert(0.8,1.2,黑色);
圆桌属性数据:
高度:
rt.getheight()<
米<
面积:
rt.getarea()<
平方米<
颜色:
rt.getcolor()<
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()函数中定义了一个对象数组用于存储输入的学生数据。
stdio.h>
#defineN3
classStud
intno;
charname[10];
intdeg;
staticintnum;
staticintsum;
voidsetdata(intn,charna[],intd)
no=n;
deg=d;
strcpy(name,na);
sum+=d;
num++;
staticdoubleavg()
returnsum/num;
printf(%-5d%-8s%3d\n,no,name,deg);
intStud:
:
sum=0;
num=0;
Studst[N];
inti,n,d;
charna[10];
for(i=0;
N;
printf(输入学号姓名成绩:
scanf(%d%s%d,&
n,na,&
d);
st[i].setdata(n,na,d);
printf(输出数据\n);
printf(学号姓名成绩\n);
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.构造函数与析构函数。