/*
*Copyright(c)2016,烟台大学计算机与控制工程学院
*All rights reserved
*文件名称:123.cpp
*作    者:王蕊
*完成日期:2016年6月1日
*版 本 号:v1.0
*
*问题描述:写一个程序,定义抽象基类的Shape,由它派生出3个派生类,Circle(圆形)、Rectangie(矩形)、Triangle(三角形)。用如下的main()函数,求出定义的几个几何体的面积和
*/
#include <iostream>
using namespace std;
class Shape  //定义抽象基类Shape
{
public:
virtual double area() const =0;  //纯虚函数,写const是因为本函数只求值不改变数据成员,故用const保护一下,与虚函数无关
};
class Circle:public Shape //定义Circle类
{
public:
Circle(double r):radius(r) {}   //结构函数
virtual double area() const  //基类中的同名纯虚函数用了const,这儿也必须写,以示同一函数,否则认为没有实现纯虚函数,仍为抽象类,不能定义对象——类的实例
{
return 3.14159*radius*radius; //定义虚函数
};
protected:
double radius;  //半径
};
class Rectangle:public Shape //定义Rectangle类
{
public:
Rectangle(double w,double h):width(w),height(h) {} //结构函数
virtual double area() const   //基类中的同名纯虚函数用了const,这儿也必须写,以示同一函数,否则认为没有实现纯虚函数,仍为抽象类,不能定义对象——类的实例
{
return width*height;    //定义虚函数
}
protected:
double width,height;   //宽与高
};
class Triangle:public Shape
{
public:
Triangle(double w,double h):width(w),height(h) {}  //结构函数
virtual double area() const
{
return 0.5*width*height; //定义虚函数
}
protected:
double width,height;    //宽与高
};
int main()
{
Circle c1(12.6),c2(4.9);//建立Circle类对象c1,c2,参数为圆半径
Rectangle r1(4.5,8.4),r2(5.0,2.5);//建立Rectangle类对象r1,r2,参数为矩形长、宽
Triangle t1(4.5,8.4),t2(3.4,2.8); //建立Triangle类对象t1,t2,参数为三角形底边长与高
Shape *pt[6]= {&c1,&c2,&r1,&r2,&t1,&t2}; //定义基类指针数组pt,使它每一个元素指向一个派生类对象
double areas=0.0; //areas为总面积
for(int i=0; i<6; i++)
{
areas=areas + pt[i]->area();
}
cout<<"totol of all areas="<<areas<<endl;   //输出总面积
return 0;
}

运行结果:

第十三周项目三-形状类族中的纯虚函数相关推荐

  1. 第十三周项目四-立体类族共有的抽象类

    /* *Copyright(c)2016,烟台大学计算机与控制工程学院 *All rights reserved *文件名称:123.cpp *作 者:王蕊 *完成日期:2016年6月1日 *版 本 ...

  2. 第十三周项目4—立体类族共有的抽象类

    /* *Copyright(c) 2016.烟台大学计算机与控制工程学院 *ALL rights reserved. *文件名称:test.cpp *作者:杨驰 *完成日期:2016年5月26 *问题 ...

  3. 第13周项目4 立体类族公有的抽象类

    /**copyright(c) 2016,烟台大学计算机与控制工程学院*All rights reserved*文件名称:test.cpp*作者:李硕*版本:Code::Blocks**问题描述:设计 ...

  4. 第十三周 项目3车辆类(继承)

    /* * Copyright (c) 2011, 烟台大学计算机学院 * All rights reserved. * 作 者:王静 * 完成日期:2013 年 6 月 2 日 * 版 本 号:v1. ...

  5. 第五周项目三-时间类(2)

    /* *Copyright(c)2016,烟台大学计算机与控制工程学院 *All rights reserved *文件名称:123.cpp *作 者:王蕊 *完成日期:2016年3月29日 *版 本 ...

  6. 第十三周项目一-分数类中的运算符重载

    /**Copyright(c)2016,烟台大学计算机与控制工程学院*All rights reserved*文件名称:123.cpp*作 者:王蕊*完成日期:2016年5月25日*版 本 号:v1. ...

  7. 第十二周项目三-数组类运算的实现

    /**Copyright(c)2016,烟台大学计算机与控制工程学院*All rights reserved*文件名称:123.cpp*作 者:王蕊*完成日期:2016年5月24日*版 本 号:v1. ...

  8. 第五周项目三-时间类(1)

    <p> </p><div>/* *Copyright(c)2016,烟台大学计算机与控制工程学院 *All rights reserved *文件名称:123.cp ...

  9. 形状类族的中的纯虚函数

    /* * 程序的版权和版本声明部分: * Copyright (c) 2013, 烟台大学计算机学院 * All rights reserved. * 文件名称:test.cpp * 作 者:任子仪 ...

最新文章

  1. linux系统下网卡故障解决
  2. R语言使用gt包和gtExtras包优雅地、漂亮地显示表格数据:使用gt包可视化表格数据,使其易于阅读和理解、使用gtExtras包添加一个图,显示表中某一列中的数字、并为类型数据添加图像符号标签
  3. feign调用session丢失解决方案
  4. Exception in thread main java.lang.NullPointerException
  5. 异常通知(After Throwing Advice)
  6. 德佑地产房产经纪人区域总监访谈:掌门的态度
  7. 【linux】linux shell if 多条件 并行 字符串判断
  8. azure java sdk_用于 Azure 媒体服务的 Java SDK 使用入门 | Microsoft Docs
  9. 词根词缀spers/spher/spir/spond等词根衍生的单词
  10. HTTP协议-python接口自动化话测试(无涯)
  11. Win32_Keyboard 键盘 参数说明
  12. java导出excel报表_java生成excel报表文件示例
  13. 从投资人发现“新大陆”,看“产融星城”为何成?
  14. python在手机使用webdriver.chromns_Selenium +Chrome浏览器如何模拟手机操作
  15. 2007你“值”多少钱(薪水,薪酬,工资,待遇,年薪,月薪)
  16. 解决QQ2009不能发临时会话信息
  17. matlab 矩阵取众数,时间序列分析的matlab统计量函数1
  18. windows10系统如何将系统语言由汉语改为英语
  19. 如何恢复音乐文件数据呢
  20. ExpRe[7] Ubuntu[0] U盘启动盘制作,重装系统

热门文章

  1. OPENCV已知内参求外参
  2. win7如何取消计算机管理员权限,win7如何删除需要管理员权限的文件夹
  3. java makedir用法_Java Files.makeDir方法代码示例
  4. mysql数据类型符号位_MySQL数据类型
  5. 第三次毕业设计任务书
  6. 2015年10月15日作业
  7. 利用MAVEN打包可运行jar包,包括依赖的第三方包
  8. mysql视图学习总结
  9. tensorflow 代码阅读
  10. 【数据库】Redis/MongoDB/MySQL/Oracle随笔索引