C++实验八

实验八  多态实现

【实验目的】

1、 了解继承和多态的作用和实现方式,掌握动态联编方法;

2、 掌握使用C++语言的抽象类和派生类实现继承性;

【实验内容】

1、 设计一个立体图形类(CStereoShape类),并满足如下要求:

•CStereoShape类有一个纯虚函数GetArea,能够获取立方体的表面积;

•CStereoShape类有一个纯虚函数GetVolume,能够获取立方体的体积;

2、 设计一个立方体类(CCube类),该类继承于CStereoShape类,并满足如下要求:

•CCube类有一个带参数的构造函数,其参数分别对应于立方体的长、宽、高。

•用一个成员函数来实现对立方体长、宽、高的设置。

•重载CStereoShape类的GetArea和GetVolume,分别完成立方体的表面积和体积的计算。

3、 设计一个球体类(CSphere),该类继承于CStereoShape类,并满足如下要求:

•CSphere类有一个带参数的构造函数,其参数对应于球体的半径。

•用一个成员函数来实现对球体半径的设置。

•重载CStereoShape类的GetArea和GetVolume,分别完成球体的表面积和体积的计算。

4、 实现一个main函数,在main函数中至少完成如下工作:

•实例化一个CCube类的对象a_cube和CSphere类的对象c_sphere;

•定义一个CStereoShape类的指针p;

•将a_cube的长、宽和高分别设置为4、5和6;将p指向a_cube,通过p将a_cube的表面积和体积打印到屏幕上;

•将c_sphere的半径设置为7;将p指向c_sphere,通过p将c_sphere的表面积和体积打印到屏幕上。

【实验要求】

1、编写实验内容要求的程序、编译并调试通过;

2、实验报告中记录编程过程中出现的错误与改正方法;

3、总结静态联编和动态联编的区别;

4、总结抽象类的特点及作用;

 1 #include<iostream>
 2 using namespace std;
 3 const double PI=3.1415926;
 4 class CStereoShape
 5 {public:
 6 virtual  double GetArea()=0;
 7 virtual double GetVolume()=0;
 8 };
 9 class CCube:public CStereoShape
10 {public:
11     CCube(double len,double wid,double hei){ length=len;width=wid;height=hei;} 
12  void Set(double len,double wid,double hei){ length=len;width=wid;height=hei;}
13     double GetArea(){return 2*(length*width+length*height+width*height);}
14     double GetVolume(){return length*width*height;}
15 private:
16  double length,width,height;
17 };
18 class CSphere:public CStereoShape
19 {public:
20     CSphere(double rad=0){ radius=rad;}
21  void Set(double rad){ radius=rad;}
22     double GetArea(){return 4*PI*radius*radius;}
23     double GetVolume(){return 4/3.0*PI*radius*radius*radius;}
24 private:
25  double radius;
26 };
27 int main(){
28     CStereoShape *p;
29     CCube a_cube(0,0,0);
30     CSphere c_sphere(0);
31  a_cube.Set(4,5,6);
32  p=&a_cube;
33  cout<<"立方体的表面积:"<<p->GetArea()<<" 立方体的体积:"<<p->GetVolume()<<endl;
34     c_sphere.Set(7);
35  p=&c_sphere;
36  cout<<"球体的表面积:"<<p->GetArea()<<" 球体的体积:"<<p->GetVolume()<<endl;
37  return 0;
38 }

【错误及改正方法】:一,开始没有搞懂构造函数和成员函数设置参数的区别,后来知道了构造函数是在创建对象的时候对对象的数据成员进行初始化的,而成员函数设置是在数据成员初始化之后对其进行修改的。二,创建了有参数的构造函数,在主函数中创建对象的时候要有相应的实参值。 【实验分析】:静态联编和动态联编的区别:静态联编又称功能早绑定,动态联编又称为功能晚绑定。绑定就是把函数体与函数调用相联系,当绑定在程序编译阶段完成时就成为功能早绑定,绑定在程序运行阶段完成为功能晚绑定。动态联编的基础是虚函数,体现了程序设计的多态性。如果一个类至少有一个纯虚函数,该类就是抽象类。特点:抽象类只能作为其他类的基类来使用,不能建立抽象类对象,这只能用来为派生类提供一个接口规范,其纯虚函数的实现由派生类给出。不允许从具体类派生出派生类。抽象类不能用作参数类型,函数返回类型或显式转换的类型。如果派生类给出了基类所有纯虚函数的实现则不再为抽象类。抽象类可以定义普通成员函数和虚函数。

转载于:https://www.cnblogs.com/poppybloom/p/3472204.html

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值