千家信息网

C++抽象基类如何理解

发表于:2024-10-14 作者:千家信息网编辑
千家信息网最后更新 2024年10月14日,本篇文章为大家展示了C++抽象基类如何理解,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。下面来聊聊抽象基类(abstract base class简称ABC)
千家信息网最后更新 2024年10月14日C++抽象基类如何理解

本篇文章为大家展示了C++抽象基类如何理解,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

下面来聊聊抽象基类(abstract base class简称ABC)。

我们之前说过,在我们实现继承的时候,需要保证派生类和基类之间是一种is-a的关系。在大多数时刻,这样的关系是没有问题的,然而在一些特殊的情况可能会遇到问题。

比如说,假设我们要实现所有的图形。在图形当中,圆是一种特殊的椭圆。但椭圆包含的属性更多,椭圆除了有中心点之外,还有半长轴、半短轴,以及方向角,而圆只需要圆心和半径即可。

也就是说虽然圆是椭圆,但圆包含的属性却更少,而不是更多。这就带来了一个问题,当我们使用继承的时候,圆并不需要半长轴、半短轴以及方向角这些信息。并且一些方法在逻辑上会有一些出入,比如说旋转rotate方法,对于圆来说并不需要旋转,再比如说放大缩小,圆的逻辑也和椭圆不同。

虽然我们有一些办法可以解决,但总体来说,在这种情况下不使用继承反而更加简单。但不使用继承又会导致圆和椭圆两者相同的逻辑需要复制粘贴一份,也不是非常合适。

针对这种情况,C++当中还有一种解法,就是将圆和椭圆类中抽象出共性,将这些共性放在一个ABC中。然而从该ABC派生出CircleEllipse类,这样我们可以使用基类指针数组同时管理CircleEllipse对象,即可以实现多态。

比如圆和椭圆的共同点是都有中心坐标,Move方法也相同,以及都有Area方法。但面积的计算方法圆和椭圆的逻辑是不同的,只是方法名一样。所以我们不能在ABC当中实现Area方法,可以将它设置成一个纯虚函数。

纯虚函数表示没有实现的函数,它的声明为结尾处为=0,如下例:

class BaseElllipse {  private:     double x;     double y;     ... public:     BaseEllipse(double x0=0, double y0=0) : x(x0), y(y0) {}     virtual ~BaseEllipse() {}     void Move(double nx, ny) {            x = nx;            y = ny;        }     virtual double Area() const=0;     ...};

当类声明当中包含纯虚函数的时候,我们不能创建该类的对象。即包含纯虚函数的类只能用作基类,要成为ABC,类中至少需要包含一个纯虚函数。

在这个例子当中,我们的Area方法没有定义,但C++是允许纯虚函数有定义的。比如,假设我们希望把Move设置成纯虚函数,

我们可以这样声明:

void Move(double nx, ny) = 0;

一样可以给Move函数创建实现:

void BaseEllipse::Move(double nx, ny) {    x = nx;    y = ny;}

总之在原型当中将函数赋值为0指出类是一个抽象基类,在类中可以不定义该函数。在使用的时候,需要注意,我们不能创建BaseEllipse对象,只能创建以它为基类的子类对象。

在子类当中,我们需要使用常规的虚函数来实现父类中的纯虚函数。

上述内容就是C++抽象基类如何理解,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注行业资讯频道。

函数 椭圆 方法 C++ 对象 时候 逻辑 情况 更多 比如说 问题 类如 何理 不同 特殊 相同 共性 内容 图形 子类 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 绝地求生更新服务器 计算机网络安全是指( )) 阿里云服务器租用安全吗 数据库设计教师评价系统 吉林网络安全薪酬 网络安全犯罪谣言 首席网络安全官什么意思 服务器集中化管理方法 有关网络安全方面的SCI期刊 普安软件开发设计 云朵互联网科技查流量 知道服务器的ip 服务器不平衡对游戏有什么影响 移动软件开发职业单位分析 福建网络技术服务网上价格 人工智能软件开发要多少钱 邮政通信网络技术课程 台州软件开发费用 上海轩盒网络技术公司地址 沈阳市公安局网络安全局 正测取空字符间数据库 互联网平台开发与网络安全 芭比直播服务器在在哪里 等什么君软件开发者怎么和它联系 学网络安全用苹果 cnki期刊数据库提供的途径 下列关于数据库中索引的描述 2008数据库安装没设密码 大话藏宝阁买的角色能转服务器么 无锡安腾软件开发有限公司
0