2022年面向对象程序设计作业 .pdf
郑州大学现代远程教育 面向对象程序设计 课程考核要求说明:本课程考核形式为提交作业,完成后请保存为WORD 2003版本格式的文档,登陆学习平台提交,并检查和确认提交成功(能够下载,并且内容无误即为提交成功)。一作业要求1. 请独立自主完成作业内容。二作业内容一) 、简答题:(每题 5 分,共 30 分)1什么是抽象类?它有什么特点?答:抽象类与接口紧密相关,它们不能示例化,并且常常部分实现或根本不实现。特点: 1 、抽象类不能直接实例化 2 、允许 (但不要求 ) 抽象类包含抽象成员。 3 、抽象类不能被密封2C+ 中使用多态的前提条件是什么?答:动态多态的前提条件: 1.通过调用虚函数实现多态 2.通过基类的指针或引用调用虚函数3. 什么是类?类与结构有和不同?答:类是引用类型在堆上分配,类的实例进行赋值只是复制了引用,都指向同一段实际对象分配的内存不同:类有构造和析构函数,类可以继承和被继承结构没有构造函数,但可以添加。结构没有析构函数,结构不可以继承自另一个结构或被继承,但和类一样可以继承自接口。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 9 页 - - - - - - - - - 4. 面向对象的特征有哪些?答:封装,继承,多态 5. 简述 this指针的含义是什么?答:this指针是一个隐含于每一个成员函数中的特殊指针。它是一个指向正在被该成员函数操作的对象, 也就是要操作该成员函数的对象。6. 友元关系具有什么特点?答:友元函数的特点是能够访问类中的私有成员的非成员函数。友元函数从语法上看, 它与普通函数一样, 即在定义上和调用上与普通函数一样。二) 、分析下面的代码,回答问题(每题 10 分,共 40 分)1 分析下面的代码,指出其中的错误,说明理由并改正class C public: int fn1( int x ) dm = x ; private: int dm; ; void main ( ) C c; c.fn1(16 ); cout c.dm n ; 答:/dm 为私有变量,是不能通过对象直接访问的,正确的做法是添加 一个public类 型的 方法 ,如public void Show()coutdmendl; 然后利用对象 c 调用 Show(), 2下面代码的执行结果是什么?为什么?名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 9 页 - - - - - - - - - class A int n; public: A() ; A(int i)n=i; A() coutn=nendl; ; class B A a; int m; public: B(int i,int j):a(i)m=j; B()coutm=mendl; ; void main() B b(1,2); 答:执行结果:n=1 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 9 页 - - - - - - - - - m=2 原因: b 对象里包含一个A类的对象, b 对象在析构时先调用A 的析构函数,再调用 B自身的析构函数3. 下面代码的执行结果是什么?为什么?class Sample int n; public: Sample(); Sample(int i)n=i; Sample& operator=(Sample); void disp()coutn=nendl; ; Sample & Sample:operator=(Sample s) Sample:n=s.n; return *this; void main() Sample s1(10),s2; s2=s1; s2.disp(); 答:结果:n=10 Sample 重载了赋值操作符,可以用Sample 的一个对象去初使化另一个对象, s2 对象被已经初使化的s1 所初使化4. 下面代码的执行结果是什么?为什么?class A public: A(char *s) coutsendl; A(); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 9 页 - - - - - - - - - ; class B:virtual public A public: B(char *s1,char*s2):A(s1) couts2endl; ; class C:virtual public A public: C(char* s1,char* s2) : A(s1) couts2endl; ; class D: public B, public C public: D(char *s1,char *s2,char *s3,char *s4):B(s1,s2),C(s1,s2),A(s1) couts4endl; ; 创 建 对 象 的 语 句 : D d(“class A”, ”class B”, ”class C”, ”class D ”); 执行结果是什么?为什么?答:执行结果:class A class B class C class D 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 9 页 - - - - - - - - - 三) 、根据要求编写完整程序: (每题 15 分,共 30 分)1设计复数类的加法运算操作,使之能够执行下列运算:( 15 分)Complex x(3,6), y(4,5), z(0,0); z = x + y; z=2.4 + x; z=y + 3.5 答:class complex public: complex(int r=0,int i=0);/构造complex operator+(const complex& other); complex Complex:operator+(const int &a); void complex:input() protected: int real,image; ; void complex:input() int real,image; cout please enter a complex: rm; real = r; image = m; complex:complex(int r,int i) real=r; image=i; return; complex complex:operator+(const complex& other) complex temp; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 9 页 - - - - - - - - - temp.real=real+other.real; temp.image=image+other.image; return temp; complex complex:operator+(const int &a) complex temp; temp.real= real +a; temp.image = image; return temp; int main(int argc,char* argv) complex a,b,c; a.input(); b.input(); c = a +b; / 输出c = 5 +a; / 输出c = b +5; / 输出 2. 设计 High 类,其数据成员为高h,定义虚函数 disp () 。由 High派生出长方体类 Cuboid 与圆柱体类 Cylinder 。在主函数中用基类指针变量 p 调用虚函数 disp ()显示长方体与圆柱体的体积。 (15 分)答:class High public: unsigned int h; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 9 页 - - - - - - - - - virtual void disp(); ; class Cuboid:public High Public: unsigned int length; unsigned int width; virtual void disp()coutlength*width*hendl; ; Class Cylinder:public High Public: unsigned int r;/半径virtual void disp()cout3.14159*r*r*hdisp(); objB.r=5; objB.h=10; p=&objB; p-disp(); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 9 页 - - - - - - - - -