郑大远程教育面向对象程序设计.docx
《郑大远程教育面向对象程序设计.docx》由会员分享,可在线阅读,更多相关《郑大远程教育面向对象程序设计.docx(12页珍藏版)》请在冰豆网上搜索。
![郑大远程教育面向对象程序设计.docx](https://file1.bdocx.com/fileroot1/2023-2/8/1630d572-852e-444a-8bbc-35b3e7ae476c/1630d572-852e-444a-8bbc-35b3e7ae476c1.gif)
郑大远程教育面向对象程序设计
郑州大学现代远程教育《面向对象程序设计》课程考核要求
说明:
本课程考核形式为提交作业,完成后请保存为WORD格式的文档,登陆学习平台提交,并检查和确认提交成功。
一.作业要求
1.请独立自主完成作业内容。
二.作业内容
一)、简答题:
(每题5分,共30分)
1、异常处理的作用是什么
答:
答:
(1).try和catch语句:
将要处理的代码放入try块中,然后创建相应的catch块的列表。
如果生成都异常与catch中提到的相匹配,那么catch条件中的块语句就被执行。
try块后可能有许多
catch块,每个都处理不同的异常。
每个catch中的参数都是Exception的子类。
(2).finally语句:
定义一个总是执行的代码,而不考虑异常是否被捕获。
(3).throw引起一个异常。
2、什么是容器什么是迭代器什么是算法他们之间有何关系
答:
容器:
容器能够通过模版的方法,装下各种类型的节点元素。
迭代器:
迭代器是一种smartpointer。
迭代器是一种行为类似指针的对象。
迭代器所指向的对象为容器中元素(结构体)的节点。
如定义一个classList的容器,容器的节点为ListItem,那么迭代器就应该指向(的对象)容器中的ListItem节点。
而迭代器通过重载*(解引用)运算符,从而就可以得到节点的值。
通过重载operator->运算符就可以得到容器节点地址(指针)
算法:
算法通过操作容器对应的迭代器,就可以间接地操作容器中的元素。
而不需要关注容器的内部细节
三者之间联系:
每个容器都有专属的迭代器,而算法通过迭代器对容器中的元素进行操作。
3、什么是静态成员有何特点
答:
在c++类中声明成员时可以加上static关键字,这样声明的成员就叫做静态成员(包括数据成员和成员函数)。
静态成员的特点是:
不管这个类创建多少个对象,其静态成员在内存中只保留一份副本,这个副本为该类的所有对象所共享。
面对对象方法中还有类属性的概念,类属性是描述类的所有对象共同特征的一个数据项对于任何对象实例,它的属性值是相同的,C++通过静态数据成员来实现类属性。
4、类的构造函数和析构函数有何特点
答:
构造函数主要用来对成员初始化和分配空间,析构函数用于执行一些清理任务,如释放分配给对象的内存空间等。
构造函数有以下特点:
(1)构造函数的名字必须与类名相同;
(2)构造函数可以有任意类型的参数,但不能具有返回类型;
(3)定义对象时,编译系统会自动地调用构造函数;
(4)构造函数是特殊的成员函数,函数体可以在类体内,也可写在类体外;
(5)构造函数被声明为公有函数,但它不能像其他成员函数那样被显式调用,它是在定义对象的同时被调用的。
析构函数有以下特点:
(1)析构函数的名字必须与类名相同,但它前面必须加一个波浪号~;
(2)析构函数没有参数,也没有返回值,而且不能被重载,因此在一个类中只能有一个析构函数;
(3)当撤销对象时,编译系统会自动地调用析构函数。
5、类成员的访问权限有哪些
答:
类成员的访问权限:
继承有关public此成员都可公开调用;
protected同包或对继承的类才可公开调用,静态成员也必须继承后才能调用或使用public;
friendly对同包的类可以公开调用;
private只有本类实例成员方法才可调用。
6、面向对象的基本要素是什么
答:
抽象、继承、封装、多态;
二)、分析下面的代码,回答问题(每题10分,共40分)
1.下面程序的执行结果是什么为什么
classB{
protected:
virtualvoidf(){cout<<"B"<public:
voidg(){f();}
};
classC:
publicB{
protected:
voidf(){cout<<"C"<};
voidmain(){
Cd;
();
}
答:
输出:
C
因为创建C类型的对象调用其父类的函数gg中调用f类中函数参数默认始终有一个this指针,这个调用的this指向的就是d对象调用g,
g中调用f产生this->f()
调用C中的f。
2.下面程序的执行结果是什么为什么
classA
{
public:
intn;
}
classB:
publicA{};
classC:
publicA{};
classD:
publicB,publicC
{
intgetn(){returnB:
:
n;};
}
voidmain()
{
Dd;
:
:
n=10;
:
:
n=20;
cout<<:
:
n<<:
:
n<}
答:
输出:
1020D类是从b类和c类派生的,而b类和c类又都是从类派生的,但各有自己的副本。
所以对于对象d,
:
:
n
与
:
:
n是两个不同的数据成员,互无联系。
所以程序结果为:
10,20
3.下面程序的执行结果是什么为什么
classA
{
protected:
intx;
public:
A(){x=0;};
A(intval){x=val;}
voidoperator++(int){x++;}
};
classB:
publicA
{
inty;
public:
B():
A(){y=0;}
B(intval1,intval2):
A(val1){y=val2;}
voidoperator--(int){x--;y--;}
voiddisp()
{
cout<}
};
voidmain()
{
Bd(3,5);
();
d++;
();
d--;
d--;
();
}
答:
输出:
35
45
23
Bd(3,5);下面程序的执行结果是什么为什么
ClassA
{
Public:
virtualvoiddisp(){cout<<”classA”<,endl;}
};
ClassB:
publicA
{
Public:
voiddisp(){cout<<”classB”<,endl;}
}
classC:
publicA
{
public:
voiddisp(){cout<<”classC”<,endl;}
}
voidcdisp(A*p){p->disp();}
voidmain()
{
Bb;
Cc;
Cdisp(&b);
Cdisp(&c);
}
答:
输出:
classBclassC
B类和c类是a类的派生,p作为参数时,是一个A的指针,但是编译时,调的disp是各自继承类成员函数。
所以输出是classB,classC。
三、根据要求编写程序:
(每题15分,共30分)
1.设计一个父亲类Father、母亲类Mother和子女类Child,其主要数据是姓名,子女使用父亲的姓,最后输出子女的姓名和父母姓名。
答:
程序如下:
#include
#include
usingnamespacestd;
classfather{
public:
father(){}
father(stringx,stringm)
{
this->x=x;
this->m=m;
}
voidgetx()
{
cout<<"陈";
}
voidshow()
{
cout<<"父亲:
"<}
private:
stringx;
stringm;
};
classmather{public:
mather(stringx,stringm)
{
mx=x;
mm=m;
}
voidshow()
{
cout<<"母亲:
"<}
private:
stringmx;
stringmm;
};
classchild:
publicfather{
public:
child(stringm)
{
mm=m;
}
voidshow()
{
cout<}
private:
stringmm;
};
voidmain()
{
fatherf("陈","国强");
matherm("李","丽");childc("文化");
cout<<"姓名:
";
();
();
();
();
}
运行结果如下:
姓名:
陈文化
父亲:
陈国强
母亲:
李丽
2.设计一个三角形类Triangle,包含三角形三条边长的私有数据成员,另有一个重载运算符+,以实现两个三角形对象的面积之和。
答:
Input
输入数据有多组,
每组占二行,每行包括3个整数,表示三角形的三条边(保证能构成三角形)。
Output对于每组数据,输出占一行。
先是第1个三角形的面积,然后是第2个三角形的面积,接下来是两个面积之和。
中间用空格隔开。
SampleInput
345
456SampleOutput
#include
#include
#include
usingnamespacestd;
classTriangle
{
private:
doublex,y,z;
doublep,m;
staticdoubles;
public:
Triangle(doublea,doubleb,doublec)
{
x=a;
y=b;
z=c;
p=(y+x+z)/2;
m=sqrt(p*(p-x)*(p-y)*(p-z));
s=s+m;
}
voidprint()
{
cout<:
fixed);
cout<(2)<}
staticvoidshow()
{
cout<
s=0;
}
};
doubleTriangle:
:
s=0;
intmain()
{
doublea,b,c,a1,b1,c1;
while(cin>>a>>b>>c)
{
cin>>a1>>b1>>c1;
Triangles1(a,b,c);
Triangles2(a1,b1,c1);
();
();
Triangle:
:
show();
}
return0;
}精心搜集整理,只为你的需要