实验四 继承与派生讲解学习.docx

上传人:b****7 文档编号:26077574 上传时间:2023-06-17 格式:DOCX 页数:12 大小:17.53KB
下载 相关 举报
实验四 继承与派生讲解学习.docx_第1页
第1页 / 共12页
实验四 继承与派生讲解学习.docx_第2页
第2页 / 共12页
实验四 继承与派生讲解学习.docx_第3页
第3页 / 共12页
实验四 继承与派生讲解学习.docx_第4页
第4页 / 共12页
实验四 继承与派生讲解学习.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

实验四 继承与派生讲解学习.docx

《实验四 继承与派生讲解学习.docx》由会员分享,可在线阅读,更多相关《实验四 继承与派生讲解学习.docx(12页珍藏版)》请在冰豆网上搜索。

实验四 继承与派生讲解学习.docx

实验四继承与派生讲解学习

 

实验四继承与派生

实验四 派生类与继承

【实验类型】验证性实验【实验课时】2学时

【实验目的】

(1)理解类的继承的概念,能够定义和使用类的继承关系。

(2)掌握派生类的声明与定义方法。

(3)熟悉公有派生和私有派生的访问特性。

(4)学习虚基类在解决二义性问题中的作用。

【实验环境】

硬件:

计算机

软件:

MicrosoftVisualC++6.0

【实验内容】

1、按要求阅读、编写、调试和运行以下程序。

(1)实验内容

①定义一个基类MyArray,基类中可以存放一组整数。

classMyArray

{public:

   MyArray(intleng);

   ~MyArray();

   voidInput();

   voidDisplay();

protected:

longint*alist;  //指向动态申请的一组空间

intlength;};   //整数的个数

基类中有构造函数、析构函数、输入数据和输出数据的函数。

②定义一个类SortArray继承自MyArray,在该类中定义函数实现排序功能。

③定义一个类ReArray继承自MyArray,在该类中定义函数实现逆转功能。

④定义一个类AverArray继承自MyArray,在该类中定义函数Aver求解整数的平均值。

⑤定义NewArray类,同时继承了SortArray,ReArray和AverArray,使得NewArray类的对象同时具有排序、逆转、和求平均值的功能。

在继承的过程中声明为虚基类,体会虚基类在解决二义性问题中的作用。

(2)实验程序(参考)

程序如下:

#include"iostream.h"

#include"process.h"

classMyArray

{public:

   MyArray(intleng);

   ~MyArray();

   voidInput();

   voidDisplay();

protected:

    longint*alist;  //指向动态申请的一组空间

    intlength;      //整数的个数

};

MyArray:

:

MyArray(intleng)

{   length=leng;

   alist=newlongint[length];

   if(alist==NULL)

   {        

cout<<"对不起,创建失败。

请重试。

";exit

(1);      

}

}

MyArray:

:

~MyArray()

delete[]alist;

   cout<<"数组被清空。

"<

}

voidMyArray:

:

Display() //显示数组内容

{  

inti;

   longint*p=alist;

   for(i=0;i

   cout<<""<<*p;

}

voidMyArray:

:

Input()    //从键盘若干整数

{  

cout<<"请输入:

"<

";

   inti;

   longint*p=alist;

   for(i=0;i

   cin>>*p;

}

classSortArray:

virtualpublicMyArray

{

private:

      intlen;

      longint*sp;

public:

  SortArray(intleng):

MyArray(leng)

  {   

len=leng;

        Sort();  

};

  voidSort()

  {  

sp=newlongint[len];

      longintq;

      sp=alist;

      for(inti=0;i

{

       for(intj=0;j

{

        if(*(sp+j)>*(sp+j+1))

        {

          q=*(sp+j);

          *(sp+j)=*(sp+j+1);

         *(sp+j+1)=q;

        }

}

}  

}

};

 

classReArray:

virtualpublicMyArray

{  

//这里是虚基类,

public:

   voidReverse()

   {

    rp=newlongint[len];

     longintq;

     rp=alist;

     for(inti=0;i

     {

q=*(rp+i);

       *(rp+i)=*(rp+len-i-1);

       *(rp+len-i-1)=q; 

     }

   }

   ReArray(intleng):

MyArray(leng)

   {

     len=leng;

     Reverse();

   }

private:

     intlen;

     longint*rp;

};

classAverArray:

virtualpublicMyArray

{   // 这里是虚基类,

public:

  doubleAver()

  {

   ap=newlongint[len];

    doubleq=0;

    ap=alist;

    for(inti=0;i

    { 

q=q+*ap;

ap++;

    }

    q=q/len;

    returnq;

}

  AverArray(intleng):

MyArray(leng)

  {

len=leng;

}

private:

   intlen;

   longint*ap;

};

classNewArray:

publicReArray,publicSortArray,publicAverArray

{public:

   NewArray(intleng);

   ~NewArray();

};

NewArray:

:

NewArray(intleng):

MyArray(leng),SortArray(leng),ReArray(leng),AverArray(leng)

cout<<"\n新数组正在创建。

\n";

}

NewArray:

:

~NewArray()

{

 cout<<"\n新数组已被清空。

\n";

}

voidmain()

{  

 charb;

 intleng;

  do

  {

    cout<<"请输入数组长度:

"<

    cin>>leng;

    while(leng<=0)

    {

cout<<"数组长度必须为大于零的整数,请重新输入数组长度:

\n";exit

(1);

      cin>>leng;

    }

    cout<<"\n开始:

\n";

    NewArrayn(leng);

    n.Input(); 

    cout<<"\n您输入的数组为:

"<

    n.Display();      //显示数组

    n.Reverse();     //显示逆序

    cout<<"\n倒序数组为:

"<

    n.Display();       //显示逆转以前的情况

   cout<<"\n平均值是:

"<

    n.Sort();        //排序

    cout<<"\n排序后(从小到大)数组为:

"<

    n.Display();      //显示排序以后的情况          

    cout<<"\n[A]继续 [Q]退出"<

    cin>>b;

 }while(b=='A'||b=='a');

}

执行结果为:

 

2、编写一个学生和教师数据输入和显示程序。

(1)实验内容

编写学生和教师数据输入和显示程序,学生数据有编号、姓名、班号和成绩,教师数据有编号、姓名、职称和部门。

要求将编号、姓名输入和显示设计成一个类person,并作为学生数据操作类student和教师数据操作类teacher的基类。

(2)实验程序(参考)

#include

 classperson

 {

protected:

   intm;

   charA[20];

   char*name;

 public:

   voidinput()

   {

cout<<"编号:

";

    cin>>m;

     cout<<"姓名:

";

     cin>>A;             

     name=&A[0];   

}

   voiddisplay()

   { 

cout<<"编号:

"<

      cout<<"姓名:

"<

}

};            

 classstudent:

publicperson

 {  

protected:

   intclassnum,mark;

public:

   voidinput1()

   {

cout<<"输入一个学生数据:

"<

      input();

      cout<<"班号:

";

    cin>>classnum;

      cout<<"成绩:

";

     cin>>mark; 

}

   voiddisplay1()

   {

cout<<"显示一个学生的数据:

"<

      display();

    cout<<"班号:

"<

    cout<<"成绩:

"<

}

};

classteacher:

publicperson

{

 protected:

   charzhicheng[20],bumen[20];

   char*p;

 public:

      

   voidinput2()

   {

cout<<"显示一个老师的数据:

"<

    input();

     cout<<"职称:

";

     cin>>zhicheng;

     cout<<"部门:

";

     cin>>bumen;   }

     voiddisplay2()

     {

cout<<"显示一个老师的数据:

"<

      display();

      p=&zhicheng[0];

      cout<<"职称:

"<

      p=&bumen[0];

      cout<<"部门:

"<

}

};

  voidmain()

  {

studentS;

teacherT;

  S.input1();

  T.input2();

  S.display1();  

  T.display2();

}

 

【实验提示】

继承是面向对象程序设计的一个重要特性,它允许在已有类的基础上创建新的类,新类可以从一个或多个既有类中继承函数和数据,而且可以重新定义或加进新的数据和函数,从而形成类的层次或等级。

实验1中着重时在这方面进行练习,除了需要熟练掌握派生类的声明和定义,还需要灵活运用公有派生和私有派生来解决实际问题。

虚基类用于想把公共的基类只产生一个拷贝时,它的初始化与一般的多继承的初始化在语法上是一样的,但是构造函数的调用顺序不同。

C++编程中派生类可以被基类指针引用,这叫向后兼容,可以提高程序的可扩充性和可维护性。

以前写的程序可以被将来写的程序调用不足为奇,但是将来写的程序可以被以前写的程序调用那可了不起。

C++语言中的技巧很多,需要熟练掌握,才能灵活运用。

【实验思考】

①实验1中有何错误,应怎样修改?

②实验2中程序是否不简结,应如何修改或者你会如何设计程序?

【实验报告要求】

①内容要求:

ⅰ.实验题目

ⅱ.实验目的

ⅲ.实验过程(含程序代码)

ⅳ.实验结果

ⅴ.实验思考题

②验报告书写要整洁、有条理。

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育 > 育儿知识

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1