【纯虚函数】设计一个形状类——矩形、圆形、三角形,分别计算三种当前图形的周长和面积

news2025/1/20 18:36:55

目录

一、纯虚函数 抽象类

纯虚函数概念:

抽象类的概念:

二、习题

题目:

代码:

测试结果:


一、纯虚函数 抽象类

纯虚函数概念

        是指没有具体实现的虚成员函数。用于这样的情况:设计一个类型时,会遇到无法定义类型中虚函数的具体实现,其实现依赖于不同的派生类

定义纯虚函数的一般格式为

virtual 返回类型 函数名(参数表)=0;

        "=0"表明程序员将不定义该虚函数实现,没有函数体,只有函数的声明;函数的声明是为了在虚函数表中保留一个位置。“=0”本质上是指将指向函数体的指针定义为nullptr,函数指针指向空,不需要写实现体。

抽象类的概念:

含有纯虚函数的类是抽象类。

抽象类不能定义对象(Shape a;//error),但是可以定义抽象类的指针或者引用,用于指向或者引用具体类的对象。

抽象类是一种特殊的类,它是为抽象的目的而建立的,它处于继承层次结构的较上层。

抽象类不能实例化对象,因为纯虚函数没有实现部分,所以含有纯虚函数类型不能实例化对象。

纯虚函数的主要作用:

        将相关的类型组织在一个层次结构中,抽象类为派生类提供一个公共的,相关的派生类型是从这个根派生来的。

        作为类族最上面的基类出现,用于派生子类。如果派生出子类,则在子类中必须要重写基类中的纯虚函数,子类中有函数的具体实现,则子类是具体类,否则,子类也是抽象类。

纯虚函数的使用:

        在当前类内写一个虚函数的目的是为了派生子类,如下,对其赋值为0,不再写实现体,函数的入口地址为NULL

二、习题

题目:

设计一个形状类——矩形、圆形、三角形,分别计算三种当前图形的周长和面积。

如下三种类:都属于shape类,对其计算周长和面积,因为具体的计算方式都不同,在各自类内定义->产生多态。

代码:

#include <iostream>
#include <iostream>
#include<math.h>
using namespace std;
#define Π 3.14
class Shape//形状类
{
public:
    virtual void Area()=0;
    virtual void Girth()=0;
};
//矩形类
class Rectangle :public Shape
{
public:
    Rectangle(int l, int w) :m_length(1), m_width(w) {}
    virtual void Area()
    {
        cout << "Rectangle area=" << m_length * m_width << endl;
    };
    virtual void Girth()
    {
        cout << "Rectangle Girth=" << 2 * (m_length + m_width) << endl;
    }
private://矩形类 :长、宽
    int m_length;
    int m_width;
};
//圆形
class Circle :public Shape
{
public:
    Circle(int r) :m_ra(r) {}
    virtual void Area()
    {
        cout << "Circle area=" << Π * m_ra * m_ra << endl;
    };
    virtual void Girth()
    {
        cout << "Circle Girth=" << Π * 2 * m_ra << endl;
    }
private:
    int m_ra;// 圆形:半径
};
//等边三角形
class Triangle :public Shape
{
public:
    Triangle(int len):m_length(len){}
    virtual void Area()
    {
        cout << "Triangle area=" << sqrt(3)/4*m_length*m_length << endl;
    };
    virtual void Girth()
    {
        cout << "Triangle area=" << 3 * m_length << endl;
    }
private:
    int m_length;//边长
};
void main()
{
    Shape * pf[3];
    pf[0] = new Rectangle(1,1);
    pf[1] = new Circle(1);
    pf[2] = new Triangle(1);
    for (int i = 0; i < 3; i++)
    {
        pf[i]->Area();
        pf[i]->Girth();
        delete pf[i];
        pf[i] = NULL;
    }
}

测试结果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/43957.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

QT+Python人脸表情特征识别

程序示例精选 QTPython人脸表情特征识别 前言 QTPython是非常经典的窗体编程组合&#xff0c;功能完善&#xff0c;可视化界面美观易维护&#xff0c;这篇博客针对人脸表情特征识别方面编写代码&#xff0c;代码整洁&#xff0c;规则&#xff0c;易读&#xff0c;对学习与使用P…

docker安装及优化

一、docker安装步骤详解 docker初期版本是1.13&#xff08;同一版本&#xff0c;开源&#xff09; ——》分类型 1.15 - 1.17 过程中分成两种。 ①开源社区 docker-ce ②企业版 docker-ee <span style"color:#000000"><span style"background-colo…

《web结课作业的源码》中华传统文化题材网页设计主题——基于HTML+CSS+JavaScript精美自适应绿色茶叶公司(12页)

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

石化技术杂志石化技术杂志社石化技术编辑部2022年第10期目录

工业、生产《石化技术》投稿&#xff1a;cnqikantg126.com 衰减全反射傅里叶变换红外光谱测定溴化丁基橡胶中硬脂酸钙含量 俞培富;王晗;李振;邓洁;宋轶;姜旭鞠; 1-292 聚丙烯催化剂均聚性能实验研究 关健;付玉祥; 3-5 无损检测在石油钻具失效检验中的应用 李梅英;吕…

pandas中read_csv和to_csv、read_hdf和to_hdf、read_json和to_json函数及其他各类文件的读取与存储

pandas I/O API 是一组访问的顶级读取器函数&#xff0c;如 pandas.read_csv&#xff08;&#xff09;&#xff0c;通常返回一个 pandas 对象。相应的编写器函数是访问的对象方法&#xff0c;如 DataFrame.to_csv&#xff08;&#xff09; 一、read_csv和to_csv pandas.read_…

适用场景全新升级!扩展 Dragonfly2 作为分布式缓存系统架构 | 龙蜥技术

文/龙蜥社区开发者 Dragonfly2 简介 Dragonfly 作为龙蜥社区的镜像加速标准解决方案&#xff0c;是一款基于 P2P 的智能镜像和文件分发工具。它旨在提高大规模文件传输的效率和速率&#xff0c;最大限度地利用网络带宽。在应用分发、缓存分发、日志分发和镜像分发等领域被大规…

1538_AURIX_TriCore内核架构_地址映射以及存储配置

全部学习汇总&#xff1a; GreyZhang/g_tricore_architecture: some learning note about tricore architecture. (github.com) 继续看TriCore的内核手册&#xff0c;这一次看一下地址映射以及存储配置。我大概顺了一遍之后&#xff0c;感觉这部分还是很简单的。而看完这部分&a…

Java使用DOM简单解析XML文件

Java使用DOM简单解析XML文件前言本文目标目标结果演示示例文件信息测试结果解析XML文件相关的Java类DocumentBuilderFactoryDocumentBuilderDocumentNodeListNode简单流程分析练练手NodeList及Node的部分结构分析关于#Text工具类测试测试代码及说明输出结果小结前言 对于某些需…

Python写了个疫情信息快速查看工具

年关将至&#xff0c;大家对疫情的关注度也愈发提升&#xff0c;本次使用PyQt5撰写100行代码写一个疫情信息快速查看工具。 一&#xff0e;准备工作 1.PyQt5 PyQt 是一个用于创建GUI应用程序的跨平台的工具包&#xff0c;它将Python编程语言和Qt库 成功融合在一起。QT库目前…

实验二-----数据库

一、实验目的 1.掌握SQL Server Management Studio中以SQL 命令方式和以向导方式操作表和数据的操作&#xff1b; 2.掌握SQL 的数据定义命令&#xff0c;包括&#xff1a;定义表、删除表和修改表&#xff1b; 3.掌握SQL 的数据更新命令&#xff0c;包括&#xff1a;插入数据、…

JavaScript基础语法(数据类型)

JavaScript基础语法&#xff08;数据类型&#xff09; 数据类型 简介&#xff1a; JavaScript 中提供了两类数据类型&#xff1a;原始类型 和 引用类型。 使用 typeof 运算符可以获取数据类型 alert(typeof age); 以弹框的形式将 age 变量的数据类型输出 原始数据类型 numbe…

数据结构:JAVA 栈和队列

目录 栈 实现一个MyStack 1. push 2.pop 3.empty 4.peek 栈和链表的结合 括号匹配 栈的压入、弹出序列 最小栈 MinStack push ​编辑 pop top getMin 概念区分及思考&#xff1a; 队列 offer&#xff08;入队列&#xff09; poll&#xff08;出队列&#xff0…

Framework ——setContentView源码解读

前言 对于Android的开发者来说&#xff0c;setContentView大家再熟悉不过了&#xff0c;在我们的Activity中首先就是要用它加载我们的布局&#xff0c;但是应该有一部分人是不知道加载布局的原理&#xff0c;也包括我&#xff0c;今天就从源码的角度分析setContentView加载布局…

Java项目:JSP的电影院售票系统(含论文、任务书、中期检查表)

作者主页&#xff1a;源码空间站2022 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 这个项目是一个基于ServletJSP的电影院售票系统&#xff0c;分为管理员和会员两种角色。 管理员权限包括&#xff1a; 修改登录密码 电影类别管…

上海亚商投顾:沪指探底回升跌0.75% 旅游板块集体大涨

上海亚商投顾前言&#xff1a;无惧大盘大跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 市场情绪三大指数早间低开&#xff0c;盘初一度集体跌超2%&#xff0c;随后震荡回升&#xff0c;午后跌幅进一步收窄。旅游板…

宝宝多大可以吃坚果 注意这几个时间节点

近年来&#xff0c;坚果的营养价值引起了公众的广泛关注。节日期间&#xff0c;许多家庭喜欢买坚果来招待客人。与其他油炸相比&#xff0c;.蜜饯零食&#xff0c;坚果真的更健康。但是&#xff0c;对于家里的宝宝来说&#xff0c;适合吃坚果吗&#xff1f;多大的宝宝能吃坚果&…

xss-labs/level-2

这一关我们先查看源代码吧 然后我们可以看得出来 输入点test存在三处输出点 依次是h2标签之间、value属性值处以及h3标签之间的长度 我们可以先尝试一下上一关输入的payload(<script>alert("xss")</script>) 界面回显如下所示 去看看源代码吧 第一处…

五、vue组件与props自定义属性

一、vue组件 1.1、什么是组件化开发 组件化开发指的是&#xff1a;根据封装的思想&#xff0c;把页面上可重用的UI结构封装为组件&#xff0c;从而方便项目的开发和维护。 1.2、vue中的组件化开发 vue是一个支持组件化开发的前端框架。 vue中规定&#xff1a;组件的后缀名是…

JavaWeb----Ajax技术

目录 Ajax技术详解 Ajax简介 Ajax 的使用 Ajax 的运行原理 XMLHttpRequest 对象 Ajax 的使用步骤 Ajax请求 ​编辑 Get/Post请求 JSON详解 JSON简介 为什么要使用 JSON JSON 格式的特征 JSON的语法规则 JOSN的数据类型 JACKSON 的使用 Jackson 简介 在项目中引入…

Scala011--Scala中的常用集合函数及操作Ⅱ

在上一篇文章中我已经接触并认识了几个常用的集合函数&#xff1a;foreach,sorted,sortBy,sortWith,flatten,map,flatMap。 接下来在这一篇文章中我将继续学习剩下的几个集合函数。 目录 一&#xff0c;filter函数 ​编辑 练习题1&#xff1a;如何过滤出大于2的奇数&#…