如何实现接口继承与实现继承的区别?

ops/2024/12/19 23:30:15/

接口继承

接口继承是指子类只继承基类的纯虚函数,即只继承基类的接口,而不继承基类的实现,子类必须实现基类中的所有纯虚函数,否则子类也成为抽象类

#include<iostream>
using namespace std;
// 纯虚类,用作接口
class Shape {
public:virtual ~Shape() = default;//显式地使用= default来指定默认析构函数virtual void draw() const = 0;  // 纯虚函数,派生类必须实现
};class Circle : public Shape {
public:void draw() const  {// Circle 特有的实现std::cout << "Drawing Circle" << std::endl;}
};
int main() {Shape* s = new Circle();s->draw();
}

实现接口

实现继承是指子类不仅继承基类的接口,还继承基类的实现,子类可以重写基类的函数,也可以直接使用基类的函数实现

#include<iostream>
using namespace std;
// 纯虚类,用作接口
class Shape {
public:virtual ~Shape() = default;// 提供默认实现virtual void draw() const {std::cout << "Drawing a generic shape" << std::endl;}
};class Circle : public Shape {
public:void draw() const override {// 调用基类实现,避免重复代码Shape::draw();std::cout << "Specifically drawing a circle" << std::endl;}private:double radius = 1.0;
};
int main() {Circle c;Shape& s = c;s.draw();return 0;
}

应用场景

接口继承:适用于定义一组通用的接口,让不同的类实现这个接口,以实现多态性,例如,在图形绘画系统中,可以定义一个抽象的图形接口类,让不同的具体图形实现这个接口

实现继承:适用于已有类的基础上进行扩展和修改,继承基类的实现可以减少代码的重复。


http://www.ppmy.cn/ops/143315.html

相关文章

2024年全球安全光幕装置行业总体规模、主要企业国内外市场占有率及排名

根据研究团队调研统计&#xff0c;2023年全球安全光幕装置市场销售额达到了46亿元&#xff0c;预计2030年将达到70亿元&#xff0c;年复合增长率&#xff08;CAGR&#xff09;为6.4%&#xff08;2024-2030&#xff09;。中国市场在过去几年变化较快&#xff0c;2023年市场规模为…

uni.request流式(Stream)请求,实现打印机效果

最近使用扣子 - 开发指南 (coze.cn)和智谱AI开放平台开发小程序AI导诊和用药对话指南。 开发的过程中也是走了不少坑,下面就来聊聊走了哪些坑。 坑1 :coze试了v2和v3的接口,两个接口请求还是有点差别的,v2拿到了botId和accessToken可以直接请求不需要做任何处理,v3还需要…

分布式任务调度 SchedulerX

SchedulerX 是一款专为大规模分布式系统设计的任务调度工具。其核心目标是帮助开发者高效、可靠地管理定时任务&#xff0c;尤其适合大数据处理、分布式计算和云原生应用等复杂环境。以下是更详细的扩展内容&#xff0c;包括其架构设计、功能特性、部署与运维建议、以及实际应用…

YOLOv11融合[CVPR2024]Starnet中的star block特征提取模块

YOLOv11v10v8使用教程&#xff1a; YOLOv11入门到入土使用教程 YOLOv11改进汇总贴&#xff1a;YOLOv11及自研模型更新汇总 《Rewrite the Stars》 一、 模块介绍 论文链接&#xff1a;https://arxiv.org/abs/2403.19967 代码链接&#xff1a;https://github.com/ma-xu/Rewri…

算法-动态数组-62.不同路径

一、题目 二、思路解析 1.思路&#xff1a; 对于找到目的地它的来源主要来源于目的地的上一格和目的地的左一格 2.常用方法&#xff1a; 无 3.核心逻辑&#xff1a; 1.处理边界&#xff1a; a.只向右移动&#xff0c;至始至终只有一条路径 for(int i0;i<m;i){dp[i][0]1; } …

OpenCV中的边缘检测和轮廓处理

在图像处理和计算机视觉任务中&#xff0c;边缘检测和轮廓处理是非常重要的步骤。OpenCV库提供了多种函数来实现这些功能&#xff0c;包括Sobel算子、Laplacian算子、Canny算子、findContours函数、drawContours函数以及透视变换函数等。本文将详细介绍这些函数的功能、参数、返…

在M系列芯片的Mac上使用Uniapp开发的依赖安装指南

在M系列芯片的Mac上使用Uniapp开发的依赖安装指南 在基于M系列芯片&#xff08;例如M3、M4&#xff09;的Mac上进行Uniapp开发时&#xff0c;使用esbuild和rollup等依赖包时需要注意处理不同架构的支持。具体问题出现在darwin-arm64&#xff08;ARM架构&#xff09;和darwin-x…

NLP论文速读(ICML 2024)|面相对齐大语言模型的迁移和合并奖励模型方法

论文速读|Transforming and Combining Rewards for Aligning Large Language Models 论文信息&#xff1a; 简介&#xff1a; 本文探讨了如何使大型语言模型&#xff08;LLMs&#xff09;与人类偏好对齐。传统的对齐方法是先从偏好数据中学习一个奖励模型&#xff0c;然后使用这…