1、郑州大学面向对象程序设计课程作业doc郑州大学现代远程教育 面向对象程序设计课程考核要求说明:本课程考核形式为提交作业,完成后请保存为WORD格式的文档,登陆学习平台提交,并检查和确认提交成功。一 作业要求1.请独立自主完成作业内容。二 作业内容一)、简答题:(每题 5 分,共30 分)1、声明类的一般格式是什么? 答:声明一个类一般格式为: class CStudent public: protected: private: ;2. 类的定义层次如下图所示。请问生成类G的对象时构造函数调用的顺序是怎样的? 答:如果继承顺序是从左到右的话,那么结果为:A C D E A B F G3、类成员的
2、访问权限有哪些? 答:成员的访问权限如下:Public: 任何人,尤其是那些要使用这个类库的客户程序员,都能访问那个紧跟在public 后面声明的成员。 默认的package: 在同一个目录里面的文件,并且都没有明确指明它是属于哪个package 的。Java 会认为这类文件是属于这个目录的“默认package”的,因此对这个目录里边的其它文件来说,它们就都是package 权限的了。 private: 除非是用这个类(包含这个成员的类)的方法,否则一律不得访问。package 里的其它类也不能访问private 成员。一个package很可能是由好几个人合作开发的,因此private 能让你
3、根据自己的需要修改那些成员,而不用担心这么做会不会对别的类产生影响。 protected: package 里面的类,那么你只能访问原先那个package 的public 成员。(当然如果是在同一个package 里面继承的话,那么你还可以访问package 权限的成员。)有时基类的创建者会希望派生类能访问某个成员,而其它类则不能访问。这就是protected 要做的。protected 也赋予成员package 权限也就是说,同一个package 里的其它类也可以访问protected 元素。 为了让代码显得更有条理,可能你选用这种风格,就是将public 成员都放在类的开头,接下来是pro
4、tected 成员,然后是package 权限的,最后是private 成员。这样做的好处就是,当用户从上到下 读代码的时候,会先看到对他们最重要的东西(就是能在文件以外访问的public 成员)。而当他们遇到非public 成员的时候,就会知道这是类的内部实现部分,是无法读到的。4. 友元关系具有什么特点? 答: 友元关系有如下特点: 第一、友元函数可以直接通过对象名访问类的私有和保护成员,可以像普通函数一样在任何地方调用。 不是该类的成员函数,可以是一个普通的函数,也可以是其他类的成员函数。 (朋友虽然不是家庭的成员,但容许到我们家里访问一样) 第二、友元函数不属于任何类,因此可以放在类说
5、明的任何位置,既可以在public区,也可以在private区。 (友元函数看看作是类的部分接口,建议出现在public的部分) 第三、友元函数不需要通过对象或对象指针来调用,可以直接调用即可。5. 定义重载运算符函数的时候需要注意哪些问题? 答:不能改变运算符的优先级。 不能改变运算符的结合性(例如,算术运算符的结合性为从左到右,这一点不能改变)。 默认参数不能喝重载的运算符一起使用,也就是说,在设计运算符重载成员函数时不能使用默认参数。 不能改变运算符的操作数的个数。 不能创建新的运算符,只有已有运算符可以被重载。 运算符作用于C+内部提供的数据类型时,原来含义保持不变6、什么是模板? 答
6、 : 模板把函数或类要处理的数据类型参数化,表现为参数的多态性。模板用于表达逻辑结构相同,且具体数据元素类型不同的数据对象的通用行为,从而使得程序可以从逻辑功能上抽象,把被处理的对象(数据)类型作为参数传递二)、分析下面的代码,回答问题(每题 10 分,共 40 分)1下面程序的执行结果是什么?为什么?class BC public: BC( ) cout BC constructorn; BC( ) cout BC destructorn; ;class DC : public BC public: DC( ) cout DC constructorn; DC( ) cout DC dest
7、ructorn; ;int main( ) DC d; return 0;答: 执行结果是: BCconstructornDCconstructornDCdestructornBCdestructorn创建子类对象首先创建基类对象调用基类构造函数,然后调用自己的构造函数,释放时先析构自己对象最后析构父类对象,有父才有子。2. 下面程序的执行结果是什么?为什么?class Sampleint n;public:Sample();Sample(int i)n=i;Sample & operator=(Sample);void disp()coutn=nendl;Sample &Sample:ope
8、rator=(Sample s)Sample:n=s.n;return *this;void main()Sample s1(10),s2; s2=s1; s2.disp();答:结果: n=10 。原因是Sample重载了赋值操作符,可以用Sample的一个对象去初使化另一个对象,s2对象被已经初始化的s1所初始化。3. 下面程序的执行结果是什么?为什么?class Samplepublic:int x;int y;void disp() coutxyendl; ;void main()int Sample:*pc;Sample s;pc=&Sample:x;s.*pc=10;pc=&Sam
9、ple:y;s.*pc=20;s.disp(); 答:本程序执行的结果是x=10,y=20。 原因是在main()中定义的pc是一个指向Sample类数据成员的指针。执行pc=&Sample:x 时,pc指向数据成员x, 语句s.*pc=10等价于s.x=10(为了保证该语句正确执行,Sample类中的x必须是公共成员); 执行pc=& amp;Sample:y时,pc指向数据成员y,语句s.*pc=20等价于s.y=20(同样,Sample类中的y必须是公共成员)。所以输出 为: x=10,y=20。4. 下面程序的执行结果是什么?为什么?class basepublic:base()fc(
10、);virtual void fc() coutIn class baseendl; virtual base() =0 coutDestructing base objectendl;class A: public basepublic:A() fc();void f() fc(); A() fd(); void fd() ;class B: public Apublic:B();void fc() coutIn class Bendl;B() fd();void fd() cout Destructing B objectfc();delete p; 答:因为构造函数先调用基类,然后子类。
11、而析构先调用子类,然后基类,所以输出: B b; 输出In class base (先调用基类构造函数),然后输出In class base(派生类A的构造函数),而B的构造函数没有额外输出。 b.fc(); 输出In class B base *p=new A; 输出In class base (先调用基类构造函数),然后输出In class base(派生类A的构造函数) p-fc(); 输出In class base(派生类的输出),因子类A没有覆盖基类的fc() delete p; 因A析构没有做事,输出Destructing base object(基类的析构函数) 程序结束: 输出
12、Destructing B object,然后输出Destructing base object三)、根据要求编写完整的程序:(每题15分,共 30 分)1. 编写一个程序,设计一个base基类,它有两个私有数据成员x和y以及一个虚函数add(),由它派生出two类和three类,后者添加一个私有数据成员z,在这些派生类中实现add成员函数,并用数据进行测试。答:设计的程序如下: class base private: float x; float y; public: virtual float Add(float,float); ;class two : public base publi
13、c: float Add(float x,float y) return x + y; ;class three : public base private: floatz; public: float Add(float x,float y) return x + y; ; int main() tow m; base * wo = &m; float value = wo.Add(5.3 , 9.5); coutvalueendl; three m1; wo = &m1 ; float value = wo.Add(5.3 , 9.5); coutvalueendl 2. 编写一个程序,设计一个点类Point,并由此派生出一个圆类。并用数据进行测试,计算圆的面积和周长。答 : 程序如下: #define PAI 3.1415926 class point public: virtual float air(float R) virtual float lang(float R) ; class yuan :public point public: float air(float R) return PAI * R * R; float lang(float R) return PAI * 2 * R
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1