5.组合与继承

1.面向对象

        在C++中,面向对象(Object-Oriented)是一种程序设计范式,它使用“对象”来设计应用程序和软件。面向对象编程(OOP)的核心概念包括类(Class)、对象(Object)、封装(Encapsulation)、继承(Inheritance)和多态性(Polymorphism)。

  1. 类(Class):类是对某一类对象的抽象描述,它定义了对象的属性和方法。属性通常表现为类的数据成员,而方法则是类的成员函数。

  2. 对象(Object):对象是类的实例。每个对象都有它自己的属性(即类的数据成员的值)和方法(即类的成员函数)。

  3. 封装(Encapsulation):封装是隐藏对象的属性和实现细节,仅对外提供公共接口。这有助于保护数据不被外部直接访问和修改,并且使得代码更易于维护和理解。

  4. 继承(Inheritance):继承允许一个类(派生类)继承另一个类(基类)的属性和方法。这使得代码重用成为可能,并有助于构建层次化的类结构。

  5. 多态性(Polymorphism):多态性意味着一个接口可以有多种实现方式。在C++中,这通常通过虚函数和继承实现。多态性允许我们编写更加通用和灵活的代码。

2.组合

        在C++中,组合(Composition)是一种面向对象设计原则,指的是一个类的对象包含其他类的对象作为其数据成员。通过组合,一个类可以重用其他类的功能,并将其纳入自己的实现中。这种关系是一种“有”的关系,即一个对象“有”另一个对象作为其一部分。

        组合是面向对象编程中代码重用和封装的重要手段之一。通过组合,你可以创建更复杂的对象,这些对象由更简单的对象组成,从而实现了功能的层次化和模块化。

 

 

#include <stdio.h>  class ARR{
public:	ARR():tail(0){}void addtail(int data);void show(void);//
private:	int data[100];	int tail;
};void ARR::addtail(int data){this->data[tail++] = data;
}
void ARR::show(void){int i = 0;for(;i<tail; i++)	printf("%d, ", data[i]);printf("\n");
}class Stume{
public: Stume(){}~Stume(){}void savescore(int score)	{scorearr.addtail(score);	}	void showscore(void){	scorearr.show();}
private:ARR scorearr;
};int main() {  Stume mmm;mmm.savescore(1);mmm.savescore(2);  mmm.savescore(3);  mmm.showscore();return 0;  
}

 

3.继承(基类、派生类)

 举例:

#include <stdio.h>  
#include <iostream>using namespace std;class ARR{
public:	ARR() {}~ARR(){}void show(void){cout << "XXXXXXXXXXX" << endl;}
};int main() {  ARR a;a.show();	return 0;  
}

 

#include <stdio.h>  
#include <iostream>using namespace std;class A{
public:	A() {}~A(){}void showx(void){cout << "XXXXXXXXXXX" << endl;}
};/* AX类是A类的升级版,(这种也叫派生,同时也叫继承)
*  A为AX的基类
*  AX为A的派生
*  AX具有A的全部功能,并且添加了新的功能
*/
class AX:public A{
public:	void showy(void){cout << "YYYYYYYYYYYY" << endl;}
};int main() {  A a;a.showx();	AX b;b.showx();b.showy();return 0;  
}

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

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

相关文章

Vivado综合属性SRL_STYLE怎么用?

“SRL_STYLE”属性是Vivado中用于控制移位寄存器&#xff08;Shift Register Logic, SRL&#xff09;映射方式的关键属性。 本文将详细介绍SRL_STYLE的工作原理、可选值及其在实际设计中的应用代码示例。 一、什么是SRL_STYLE&#xff1f; SRL_STYLE属性用于指导Vivado综合工…

方便快捷!使用Roboflow进行数据增强(附详细操作)

最近使用自定义数据集训练yolov8模型的时候突然发现一件很令人头疼的事情。那就是&#xff0c;数据集中图片太少了。于是想通过数据增强的方法扩大数据集。 通过查阅资料发现&#xff0c;大部分人都是用python中的imgaug库进行图像处理&#xff1b;这种方法最大的不便就是需要转…

【贪心算法】Leetcode 55. 跳跃游戏【中等】

跳跃游戏 给你一个非负整数数组 nums &#xff0c;你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标&#xff0c;如果可以&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 示例 1&…

RTT设备驱动框架学习(GPIO)

基类对象&#xff0c;定义在rtdef.h中 struct rt_object {char name[RT_NAME_MAX];rt_uint8_t type; //设备类Devicert_uint8_t flag;rt_list_t list; }; //同一类对象挂接在一个链表上设备基类&#xff0c;定义在rtdef.h中&#xff08;属于设备接口层&#xff09; struct rt…

如何通过需求跟踪矩阵加强需求管理?

需求跟踪矩阵是强化需求管理的有效工具&#xff0c;它能直观地展示需求与项目各阶段产出物之间的映射关系&#xff0c;确保每个需求从提出到最终实现都得到严密的跟踪与控制&#xff0c;从而提高需求质量和开发效率&#xff0c;保障项目顺利交付。 如果没有需求跟踪矩阵&#x…

多图详解VSCode搭建Python开发环境

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

【Elasticsearch】Elasticsearch 从入门到精通(二):基础使用

《Elasticsearch 从入门到精通》共包含以下 2 2 2 篇文章&#xff1a; Elasticsearch 从入门到精通&#xff08;一&#xff09;&#xff1a;基本介绍Elasticsearch 从入门到精通&#xff08;二&#xff09;&#xff1a;基础使用 &#x1f60a; 如果您觉得这篇文章有用 ✔️ 的…

用Python将原始边列表转换为邻接矩阵

&#x1f47d;发现宝藏 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 在图论和网络分析中&#xff0c;图是一种非常重要的数据结构&#xff0c;它由节点&#xff…

Python 中元组和列表的根本区别是什么?

&#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ 在 Python 中&#xff0c;元组&#xff08;Tuple&#xff09;和列表&#xff08;List&#xff09;都是用于存储数据序列的数据结构&#xff0c;它们可以存储任何类型的数据&#xff0c;支持通过索引访问…

【AI开发:音频】一、GPT-SoVITS整合工具包的部署问题解决(GPU版)

前言 目前GPT-SoVITS的合成效果比较不错&#xff0c;相比较其他厂商的产品要规整的多。众多厂家中也是国内使用最多的一款了&#xff0c;并且这个整合包里携带了&#xff0c;除背景音、切割、训练、微调、合成、低成本合成等一些列完整的工具&#xff0c;也可以作为API进行使用…

StartAI智能绘图软件出现“缺少Python运行库”怎么办?

StartAI做为一款国产AI界的新秀&#xff0c;是一款贴合AIGC新手的智能绘图软件。新手安装遇见“缺少Python运行库”怎么办”&#xff1f;小编一招搞定~ 解决方法&#xff1a;手动下载【resource文件】&#xff0c;将文件添加到安装目录下。 点击链接进行手动下载噢~ 确保 Star…

React首次加载渲染2次的问题

在开发React项目的时候&#xff0c;发现useEffect会调用2次的情况&#xff0c;依赖数组明明没有变化&#xff0c;怎么会调用2次&#xff1f;百思不得其解&#xff0c;依赖没变化的话&#xff0c;那肯定是整个组件重渲染了。 最最简单的代码如下&#xff1a; const container …

【抽代复习笔记】14-群(八):变换群中的旋转、位似、平移变换群

定理1&#xff1a;集合A上的所有一一变换的集合G关于变换的乘法&#xff08;复合&#xff09;作成群。 证&#xff1a;首先&#xff0c;恒等变换ɛ:A→A(ɛ(x) x)是集合A上的一一变换&#xff0c;所以ɛ∈G&#xff0c;即G≠∅&#xff1b; ①对任意的f,g∈G&#xff0c;由映…

AI人工智能培训老师叶梓:大数据治理的关键工具:开源数据血缘分析系统

在大数据时代&#xff0c;数据的产生和传播速度日益加快&#xff0c;数据之间的关系也变得日益复杂。为了更好地管理和理解数据之间的关系&#xff0c;数据血缘分析系统应运而生。本文将介绍几个开源的数据血缘分析系统&#xff0c;它们在数据治理、数据质量管理和数据隐私保护…

ragflow 大模型RAG知识库使用案例

参考: https://github.com/infiniflow/ragflow/blob/main/README_zh.md 支持丰富的文件类型,包括 Word 文档、PPT、excel 表格、txt 文件、图片、PDF、影印件、复印件、结构化数据, 网页等。 运行步骤: 1、确保 vm.max_map_count 不小于 262144 【更多】: 如需确认 vm.…

ThingsBoard服务端使用RPC通过网关给设备发送消息

一、概述 1、发送服务器端网关RPC 二、案例&#xff1a; 1、建立设备与网关之间的通讯 2、查看设备和网关是否在线状态啊 3、通过 仪表盘&#xff0c;创建设备A的模拟RPC调用的窗口链接 4、在客户端的网关设备上订阅RPC网关的主题信息 5、通过服务端的窗口&#xff0c;发…

3DGS CUDA代码笔记

本篇文章 一Scaffold GS 为例子。 目标在里面添加 Render Depth 的代码&#xff1a; 将可见的 Gaussians Render 到 2D 图像上面 from diff_gaussian_rasterization import GaussianRasterizationSettings, GaussianRasterizer .......rasterizer GaussianRasterizer(raster…

uni-app开发canvas绘图画画,如何实现后退功能

在uni-app中使用canvas进行绘图时&#xff0c;实现后退功能通常意味着你需要保存用户的每一步操作&#xff0c;然后提供一个机制来撤销最近的步骤。下面是一个基本的实现思路&#xff1a; 保存绘图步骤&#xff1a; 每当用户在canvas上绘制时&#xff08;比如通过touchMove事件…

python 对图片进行操作

Pillow是一个强大的图像处理库&#xff0c;它提供了许多用于打开、操作和保存图像的功能。 Image模块&#xff1a; Image模块提供了用于打开、创建、编辑和保存图像的基本功能。可以使用Image.open()函数来打开图像文件&#xff0c;或者使用Image.new()函数来创建新的图像,还可…

深度剖析Gateway在微服务治理中的关键角色

目录 一、多层网关 二、Gateway 路由规则 2.1 路由 2.2 谓词 2.3 过滤器 三、路由声明规则 3.1 谓词 寻址谓词 请求参数谓词 时间谓词 自定义谓词 一、多层网关 首先我们先了解下一个请求是如何到达服务端并得到相应的。过程如图所示&#xff1a; 首先网址解析的第一步是 DN…