// pure virtual function

// pure virtual function

总之,在原型中使用=0指出类是一个抽象基类,在类中可以不定义该函数。
现在,可以从BaseEllipse 类派生出Ellips类和Circle类,添加所需的成员来完成每个类。需要注意的
点是,Circle类总是表示圆,而Ellipse类总是表示椭圆 -- 也可以是圆。不过,Ellipse类圆可被重新缩
放为非圆,而Ciecle类圆必须始终为圆。
使用这些类的程序将能够创建Ellipse对象和Circle对象,但是不能创建BaseEllipse对象。由于Circle
和Ellipse对象的基类相同,因此可以用BaseEllipse 指针数组同时管理这两种对象。像Circle和Ellipse这
样的类有时被称为具体(concrete)类,这表示可以创建这些类型的对象。
简而言之,ABC描述的是至少使用一个纯虚函数的接口,从ABC派生出的类将根据派生类的具体特
征,使用常规虚函数来实现这种接口。

13.6.1 应用ABC概念

您可能希望看到·个完整的ABC范例,因此这里将这一概念用于Brass和BrassPlus账户,首先定义
个名为 AcctABC的ABC。这个类包含 Brass 和 BrassPlus 类共有的所有方法和数据成员,而那些在
BrassPlus 类和Brass类中的行为不同的方法应被声明为虚函数。至少应有一个虚函数是纯虚函数,这样才
能使AcctABC成为抽象类。
程序清单13.11的头文件声明了AcctABC类(ABC)、Brass类和BrassPlus类(两者都是具体类)。为
帮助派生类访问基类数据,AcctABC提供了一些保护方法;派生类方法可以调用这些方法,但它们并不是
派生类对象的公有接口的组成部分。AcctABC还提供一个保护成员函数,用于处理前面几种方法中执行的
格式化。另外,AcctABC类还有两个纯虚函数,所以它确实是抽象类。

程序清单13.11 acctabc.h
// acctabc.h -- bank account classes
difndef ACCTABC_H
#define ACCTABC_H

// Abstract Base Class
class AcctABC

private:
enum {MAX = 35):
char fullName [MAX]:
long acctNum;
double balance:
protected:
const char * FullName()const (return fullName: )
long AcctNum()const (return acctNum; }
std :: ios_base: : fmtflags SetFormat() const:
public:
AcctABC (const char *s - "Nullbody", long an - -1,
double bal = 0.0);
void Deposit (double amt):
virtual void Withdraw (double amt) = 0: // pure virtual function
double Balance()const ireturn balance: }:
virtual void ViewAcct() const = D;
virtual -AcctABC((}

// Brass Account Class
class Brass: public AcctABC

public:
Brass (const char *s - "Nullbody", long an - -1,
double bal = 0.0): AcctABC (s, an. bal) { }
virtual void Withdraw (double amt):

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

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

相关文章

TS的基本类型!

基础类型 1.布尔值 最基本的数据类型就是简单的 true/false 值,在JavaScript 和 TypeScript 里叫做 boolean(其它语言中也一样)。 let isDone: boolean false; isDone true; // isDone 2 // error 2.数字number 和 JavaScript 一样&am…

laravel 中间件跨域自定义封装

laravel 跨域cors中间件封装 <?php namespace App\Http\Middleware;use Closure;class CorsMiddleware {/*** Handle an incoming request.** param \Illuminate\Http\Request $request* param \Closure $next* return mixed*/public function handle($request, Closu…

transdata笔记:手机数据处理

1 mobile_stay_duration 每个停留点白天和夜间的持续时间 transbigdata.mobile_stay_duration(staydata, col[stime, etime], start_hour8, end_hour20) 1.1 主要参数 staydata停留数据&#xff08;每一行是一条数据&#xff09;col 列名&#xff0c;顺序为[‘starttime’,…

[足式机器人]Part2 Dr. CAN学习笔记- 最优控制Optimal Control Ch07-2 动态规划 Dynamic Programming

本文仅供学习使用 本文参考&#xff1a; B站&#xff1a;DR_CAN Dr. CAN学习笔记 - 最优控制Optimal Control Ch07-2 动态规划 Dynamic Programming 1. 基本概念2. 代码详解3. 简单一维案例 1. 基本概念 Richoard Bell man 最优化理论&#xff1a; An optimal policy has the …

纯C无操作系统轻量协程库Protothread使用记录

文章目录 目的源码说明使用演示总结 目的 在单片机开发中很多时候都是无操作系统环境&#xff0c;这时候如果要实现异步操作&#xff0c;并且流程逻辑比较复杂时处理起来会稍稍麻烦。这时候可以试试 Protothread 这个协程库。 官网&#xff1a; https://dunkels.com/adam/pt/…

年节安全网购温馨提示,请注意查收!

才庆祝完新年&#xff0c;又快迎来春节&#xff0c; 置办年货&#xff0c;喜气连连。 而对于网络犯罪分子而言&#xff0c;节假日往往是一年中快速掠取高额收益的绝佳机会。每逢节假日&#xff0c;不法分子便故技重施&#xff0c;依赖各类经典骗局诱骗缺乏戒备心的消费者。然…

深入剖析:Kafka流数据处理引擎的核心面试问题解析75问(5.7万字参考答案)

Kafka 是一款开源的分布式流处理平台&#xff0c;被广泛应用于构建实时数据管道、日志聚合、事件驱动的架构等场景。本文将深入探究 Kafka 的基本原理、特点以及其在实际应用中的价值和作用。 Kafka 的基本原理是建立在发布-订阅模式之上的。生产者将消息发布到主题&#xff08…

37-WEB漏洞-反序列化之PHPJAVA全解(上)

WEB漏洞-反序列化之PHP&JAVA全解&#xff08;上&#xff09; 一、PHP 反序列化原理二、案例演示2.1、无类测试2.1.1、本地2.1.2、CTF 反序列化小真题2.1.3、CTF 反序列化类似题 2.2、有类魔术方法触发2.2.1、本地2.2.2、网鼎杯 2020 青龙大真题 三、参考资料 一、PHP 反序列…

SpringMVC(八)处理AJAX请求

一、处理AJAX之准备工作: 首先我们创建一个新的工程: 我们将pom.xml复制过来: <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-in…

【项目日记(三)】内存池的整体框架设计

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:项目日记-高并发内存池⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你做项目   &#x1f51d;&#x1f51d; 开发环境: Visual Studio 2022 项目日…

MES管理系统为何成为汽配企业的刚需

随着经济全球化、产品定制化及安全法规的严格化&#xff0c;汽配企业的经营环境变得越来越复杂。中国劳动力资源和原辅料成本的持续上升&#xff0c;导致行业利润率不断下滑。为了应对这些挑战&#xff0c;汽配企业需要引入一种精益制造和管理的工具&#xff0c;而MES管理系统正…

高防CDN与dns结合有哪些优势

高防CDN与DNS结合有哪些优势 随着互联网技术的发展和应用的普及&#xff0c;网络安全问题也日益突出。为了保护网站免受恶意攻击和黑客的侵害&#xff0c;高防CDN与DNS结合被广泛应用于网络安全领域&#xff0c;具有许多优势。 首先&#xff0c;高防CDN与DNS结合可以有效减轻…

PG DBA培训26:PostgreSQL运维诊断与监控分析

本课程由风哥发布的基于PostgreSQL数据库的系列课程&#xff0c;本课程属于PostgreSQL Diagnosis and monitoring analysis&#xff0c;学完本课程可以掌握PostgreSQL日常运维检查-风哥PGSQL工具箱&#xff0c;风哥专用PGSQL工具箱介绍&#xff0c;风哥专用PGSQL工具箱使用&…

四款通用组织架构图模板-一键高清导出

组织架构图作为一种直观的图形化工具&#xff0c;能够帮助我们更好地理解和规划组织结构&#xff0c;提高工作效率。今天&#xff0c;我们就为大家带来四款通用组织架构图模板&#xff0c;让你一键高清导出&#xff0c;轻松搞定组织架构设计&#xff01; 第一款&#xff1a;某基…

vue实现验证码倒计时功能

开发验证码倒计时功能的必要性 主要是为了防止用户频繁的点击&#xff0c;获取短信验证码是有时间限制的&#xff0c;这样就可以让用户在规定的时间内只能点击一次&#xff0c;在客户端就只是告知用户这个什么时候可以点击&#xff0c;在服务端就可以更少的调用这个接口&#x…

LeetCode-410.分割数组的最大值

原题链接&#xff1a;https://leetcode.cn/problems/split-array-largest-sum/description 题面 给定一个非负整数数组 nums 和一个整数 k &#xff0c;你需要将这个数组分成 k 个非空的连续子数组。设计一个算法使得这 k 个子数组各自和的最大值最小。 思路 数组定义&#xff…

Excel乱码?教你3个简单解决方法!

“我在编辑一个文件时&#xff0c;Excel突然就乱码了&#xff0c;怎么会这样呢&#xff1f;这个文件对我来说是比较重要的&#xff01;有什么方法可以快速解决吗&#xff1f;” 在处理Excel文件时&#xff0c;我们有时会遇到乱码问题。乱码不仅影响数据的可读性&#xff0c;还可…

PySide6/PyQt6中Qt窗口标志/窗口属性汇总,如何正确的设置窗口标志/窗口属性

文章目录 📖 介绍 📖🏡 环境 🏡📒 使用方法 📒📚 窗口标志汇总📚 窗口属性汇总📝 使用方法📝 注意事项⚓️ 相关链接 ⚓️📖 介绍 📖 在Qt框架中,窗口标志(window flags)是用于控制窗口的各种属性和行为的强大工具。它们通过设置窗口的属性,如边框…

vue3中Fragment特性的一个bug,需要留意的注意事项

vue3中的Fragment 模版碎片特性是什么&#xff0c;简单的理解就是template模板代码不在像vue2中那样必须在根节点在包裹一层节点了。 vue2写法 <template><div><h1>标题</h1><p>正文内容</p></div> </template>vue3写法 &l…