一、实验目的和要求
1、掌握派生类的定义方法和派生类构造函数的定义方法。
2、掌握在不同继承方式的情况下,基类成员在派生类中的访问权限。
3、掌握在多继承方式的情况下,构造函数与析构函数的调用时机与顺序。
二、实验内容
1、调试下列程序,并在对程序进行修改后再调试,指出调试中的出错原因。
- //sy5_1.cpp
- #include<iostream>
- usingnamespace
- class
- public
- voidint
- intreturn
- public
- int
- classpublic
- public
- voidint
- intreturn
- void
- public
- int
- int
- cout<<"A::a="
- cout<<"B::b="
- cout<<"A::a="
- cout<<"B::b="
- return
按下列要求对程序进行修改,然后调试,对出现的错误分析其原因。
(1)将派生类B的继承方式改为private时,会出现哪些错误和不正常现象?为什么?
(2)将派生类B的继承方式改为protected时,会出现哪些错误和不正常现象?为什么?
(3)将派生类B的继承方式恢复为public后,再将A中数据成员int型变量a的访问权限改为private时,会出现哪些错误和不正常现象?为什么?
(4)派生类B的继承方式仍为public,将类A中数据成员int型变量a的访问权限改为protected时,会出现哪些错误和不正常现象?为什么?
2、重写教材中的Li4_10.cpp程序,给每个类增加一个析构函数,并使类之间的关系如附图1所示,再写出程序的输出结果。(sy5_2.cpp)
- #include<iostream>
- usingnamespace
- class
- public
- class
- public
- classpublicvirtualpublic
- public
- classpublicvirtualpublic
- public
- classpublicvirtualpublic
- public
- int
- return
运行结果:
3、利用继承性与派生类啦管理学生和教师档案。假设要管理下述几类人员的如下一些数据。
要求每个类只设立构造函数以及显示类对象数据的成员函数。编写主函数,说明有关类对象,并对其类成员函数进行简单实用。(sy5_3.cpp)
4、试写出所能想到的所有形状(包括二维的和三维的),生成一个形状层次类结构。生成的层次结构以Shape作为基类,并由此派生出TwoDimShape类和ThreeDimShape类。它们的派生类是不同形状类,定义层次结构中的每一个类,并用函数main()进行测试。(sy5_4.cpp)
- #include<iostream.h>
- constdouble
- class
- {public:doubleconst{return
- void
- classvirtualpublic
- classvirtualpublic
- //三角形类
- classpublic
- {public:Triangle(doubledoubledoubleconstreturn
- void
- private:double
- //正方形类
- classpublic
- {public:Square(double
- doubleconstreturn
- void
- private:double
- //正方体
- classpublic
- {public:Squarer(double
- doubleconstreturnvoidprivate:double
- //球
- classpublic
- {public:Ball(double
- doubleconstreturn
- voidprivate:double
- int
- double
- cout<<
- double
- //
- cout<<
- //
- cout<<
- //
- cout<<
- return
运行结果:
三、分析与讨论
1、通过对实验内容中第1题的调试,总结不同继承方式的情况下,基类成员在派生类中的访问权限。
2、解释实验内容中第2题的运行结果,总结多继承方式的情况下,构造函数与析构函数的调用时机与顺序。虚基类的构造函数与普通基类的构造函数在调用时有什么不同?
3、如果希望附图1中的Base1、Base2均有两个,如何修改程序?
四、实验小结