当前位置:文档之家› 派生类与继承实验报告

派生类与继承实验报告

洛阳理工学院实验报告 系别 计算机与信息工程系 班级 B11050 学号 B11050 姓名

课程名称 C++面向对象与程序设计 实验日期 2013.10.8 实验名称 派生类与继承 成绩 实验目的: 1、 掌握派生类的声明方法和派生类构造函数的定义方法; 2、 掌握不同继承方式下,基类成员在派生类中的访问属性; 3、 掌握在继承方式下,构造函数与析构函数的执行顺序与构造规则; 4、 学习虚基类在解决二义性问题中的作用。

实验条件: 装有Microsoft Visual C++6.0软件的计算机

实验内容: 1.输入下列程序。 //test4_1.cpp #include using namespace std; class Base{ public: void setx(int i) {x=i;} Int getx() {return x;} public: int x; }; class Derived:public Base{ public: void sety(int i) {y=i;} int gety() {return y;} void show() {cout<<”Base::x=”<} public: inty; }; int main() {Derived bb; bb,setx(16); bb.sety(25); bb.show(); cout<<”Base::x=”

写出程序的运行结果。 (2) 按以下要求,对程序进行修改后再调试,指出调试中出错的原因。 ①将基类Base中数据成员x的访问权限改为private时,会出现哪些错误?为什么? ②将基类Base中数据成员x的访问权限改为protected时,会出现哪些错误?为什么? ③在源程序的基础上,将派生类Derived的继承方式改为private时,会出现哪些错误?为什么? ④在源程序的基础上,将派生类Derived的继承方式改为protected时,会出现哪些错误?为什么?

解答如下; ①将基类Base中数据成员x的访问权限改为private时,会出现哪些错误?为什么?

因为基类Base中数据成员x的访问权限改为private时,基类的私有成员在派生类中并没有成为派生类的私有成员,使得再通过派生类的对象调用x时,不能被系统所识别,出现了错误。

②将基类Base中数据成员x的访问权限改为protected时,会出现哪些错误?为什么?

因为基类Base中数据成员x的访问权限改为protected时,公用基类的保护成员在公用派生类中的访问属性仍然是保护,在公用派生类外就不能通过公用派生类的对象访问该成员,所以出现了错误。 ③在源程序的基础上,将派生类Derived的继承方式改为private时,会出现哪些错误?为什么?

将派生类Derived的继承方式改为private时,私有基类中的公用成员在私有派生类中的访问属性为私有,在类外不能通过对象调用私有成员,只能通过成员函数调用.

④在源程序的基础上,将派生类Derived的继承方式改为protected时,会出现哪些错误?为什么?

因为私有继承时基类中的公有函数到派生类中一是私有成员,不能通过对象访问,只能通过成员函数来访问。

2.编写一个学生和教师的数据输入和显示程序。学生数据有编号、姓名、性别、年龄、系别和成绩,教师数据有编号、姓名、性别、年龄、职称和部门。要求将编号、姓名、性别、年龄的输入和显示设计成一个类Person,并作为学生类Student和教师类Teacher的基类。 供参考的类结构如下: class Person{ ... }; class Student:public Person{ ... }; class Teacher:public Person{ ... }; 程序代码: #include #include using namespace std; class Person {public: Person(int n,string nam,char s,int a) {num=n; name=nam; sex=s; age=a; } ~Person(){} protected: int num; string name; char sex; int age; }; class Student:public Person {public: Student(int n,string nam,char s,int a,string ap,int sc):Person( n,nam, s, a) {apart=ap; score=sc; } void show1() {cout<<"num:"

(4)结果分析:注意构造函数和派生类调用基类的构造函数赋值,在后面对新增的参数初始化,通过对象赋值后再对其输出。

3.按要求阅读、编辑、编译、调试和运行以下程序。 (1) 阅读、编辑、编译、调试和运行以下程序,并写出程序的运行结果。 //test4_3_1.cpp #include #include using namespace std; class MyArray{ public: MyArray(int leng); ~MyArray(); void Input(); void Display(string); protected: int*alist; int length; }; MyArray::MyArray(int leng) {if(leng<=0) {cout<<"error length"; exit(1); } alist=new int [leng]; length=leng; if(alist==NULL) {cout<<"assign failure"; exit(1); } cout<<"MyArray类对象已创建。"<} MyArray::~MyArray() {delete[] alist; cout<<"MyArray类对象被撤销。"<} void MyArray::Display(string str) {int i; int *p=alist; cout<

相关主题