5.组合与继承

news2024/11/18 17:20:28

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.coloradmin.cn/o/1621069.html

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

相关文章

设计模式——状态模式19

状态模式是一种行为设计模式&#xff0c; 允许一个对象在其内部状态改变时改变它的行为&#xff0c;对象看起来好像修改了它的类。状态模式的核心是状态与行为绑定&#xff0c;不同的状态对应不同的行为。 设计模式&#xff0c;一定要敲代码理解 状态行为抽象 //在某种状态下&…

多模态模型

转换器成功作为构建语言模型的一种方法&#xff0c;促使 AI 研究人员考虑同样的方法是否对图像数据也有效。 研究结果是开发多模态模型&#xff0c;其中模型使用大量带有描述文字的图像进行训练&#xff0c;没有固定的标签。 图像编码器基于像素值从图像中提取特征&#xff0c;…

《十》Qt各种对话框之QFontDialog

QFontDialog 在介绍 QFontDialog 对话框之前&#xff0c;我们先简单介绍一下 QFont 字体类。QFont 主要用于控制文本显示的字体&#xff0c;字体主要有四大属性&#xff1a;①字体家族 family 决定字体外观家族&#xff0c;比如宋体、楷体等&#xff1b; ②字号 pointSize &am…

用于车载T-BOX汽车级的RA8900CE

用于车载T-BOX等高精度计时的汽车级时钟模块RTC:RA8900CE.车载实时时钟芯片RA8900CE内置32.768Khz的晶体&#xff0c;实现年、月、日、星期、小时、分钟和秒精准计时。RA8900CE满足AEC-Q200认证&#xff0c;内置温补功能&#xff0c;保证实时时钟的稳定可靠&#xff0c;功耗低至…

huggingface模型下载至本地并调用教程

huggingface内有许多预训练模型&#xff0c;可以在线调用模型或者将模型部署至本地&#xff0c;但有时候通过网址调用模型会很慢&#xff0c;有些服务器甚至无法通过网址调用… 那么&#xff0c;正题&#xff0c;如何将huggingface的模型部署至本地呢&#xff1f;其实很简单&am…

MongoDB磁盘空间占满,导致数据库被锁定,如何清理数据和磁盘空间

一、问题 1、我在实际项目中&#xff0c;遇到一个问题&#xff0c;随着数据每天的不断增加&#xff0c;导致mongodb的磁盘空间站满了&#xff0c;数据库被锁了&#xff0c;无法使用。 2、故障表现 部署的应用程序突然无法将数据写入数据库&#xff0c;但是可以正常读取数据。…

如何在OpenWRT上配置SFTP远程文件传输

如何在OpenWRT上配置SFTP远程文件传输 OpenWRT 是一款广泛使用的开源路由器固件&#xff0c;它能够让普通的家用路由器具备高级路由功能&#xff0c;提供更多自定义和优化选项。本文将介绍如何在OpenWRT上配置SFTP&#xff08;SSH文件传输协议&#xff09;服务&#xff0c;以便…

SpringBoot内容协商机制(就是接受数据的类型如json,xml)

目录 一、基于请求头的内容协商机制 二、基于请求参数的内容协商机制 一、基于请求头的内容协商机制 如果我们的Java服务为浏览器和安卓手机同时提供服务&#xff0c;浏览器期望接受的请求是JSON格式&#xff0c;安卓客户端期望接收的请求是XML格式&#xff0c;这个时候是否需…

CentOS-7安装clickhouse并允许其他主机登录

一、通用设置 1、配置主机名 hostnamectl set-hostname --static 主机名2、修改hosts文件 vim /etc/hosts 输入&#xff1a; 192.168.15.129 master 192.168.15.133 node1 192.168.15.134 node2 192.168.15.136 node33、 保持服务器之间时间同步 yum install -y ntpdate &…

互联网和嵌入式,哪个更吃香?

在开始前我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「嵌入式的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&#xff01;显然&#xff0c;互联网更受青…

Vue3+Echarts: 浏览器缩小后,图表内容发生重叠

一、问题 Vue3Echarts项目&#xff1a;浏览器缩小后&#xff0c;图表内容发生重叠。本文将提供几个解决上述问题的思路&#xff0c;后续有新的解决思路将在此处进行补充。 二、解决思路 1、动态调整ECharts配置 如果图表容器的尺寸没有随着浏览器窗口的缩小而进行相应地调整…

<计算机网络自顶向下> 无连接传输UDP

UDP&#xff1a;User Datagram Protocol “尽力而为”的服务 报文可能丢掉或者乱序好处&#xff1a; 效率高&#xff08;不建立连接无拥塞控制和流量控制【应用->传输的速率主机->网络的速率】&#xff09;报文段的头部很小&#xff08;开销小&#xff09;UDP被用于 流媒…

政安晨:【Keras机器学习示例演绎】(七)—— 利用 NeRF 进行 3D 体积渲染

目录 简介 设置 下载并加载数据 NeRF 模型 训练 可视化训练步骤 推理 渲染三维场景 可视化视频 结论 政安晨的个人主页&#xff1a;政安晨 欢迎 &#x1f44d;点赞✍评论⭐收藏 收录专栏: TensorFlow与Keras机器学习实战 希望政安晨的博客能够对您有所裨益&#xff0…

图像预处理工具_CogPolarUnwrapTool

CogPolarUnwrapTool CogPolarUnwrapTool 工具能够将环形区域通过极坐标变换 转换为矩形区域&#xff0c;方便读取 转换的步骤&#xff1a; 1.根据环形到矩形的映射来构建一个转换关系。 2.根据这个转换关系将输出图像中的像素点映射到输入图像。 3.对输入图像中的点像素进行…

浅析未来:深度学习的挑战与机遇

浅析未来&#xff1a;深度学习的挑战与机遇 1 引言 在过去的十年里&#xff0c;深度学习已经从一个相对边缘的研究领域发展成为计算机科学和人工智能中最为活跃和引人注目的领域之一。无论是在图像识别、自然语言处理、还是在更为复杂的决策制定任务中&#xff0c;深度学习技术…

索引!索引!!索引!!!到底什么是索引?

文章目录 索引的概述索引的优劣势优势劣势 索引的分类实现索引的数据结构B 树&#xff08;B-Tree&#xff09;B树&#xff08;B Tree&#xff09;哈希索引&#xff08;Hash Index&#xff09; 前言&#xff1a; 相信接触过编程的同学都听说过 索引&#xff0c;那么到底什么是索…

第六讲-流程挖掘(Process Mining)学习日志之α算法精讲

第六讲-流程挖掘&#xff08;Process Mining&#xff09;学习日志之α算法精讲 通过给定一个简单的事件日志&#xff0c;α算法可以得到一个(希望)能够重演日志的 Petri 网。同时α算法是最早的能够适当处理并发的过程发现算法之一。 参考&#xff1a;PROCESS MINING&#xff1…

【电子元件】常用的二极管、极管规格参数一览表

目录 1. 常用的二极管规格参数1.1 贴片二极管1.2 直插二极管 2. 常用的三极管规格参数2.1 贴片三极管2.2 直插三极管 参考资料 1. 常用的二极管规格参数 1.1 贴片二极管 型号/封装丝印正向压降(Vf) 反向击穿电压(Vr)平均整流电流(Io)/正向工作电流(If)反向电流(Ir)反向恢复时间…

YOLOv9训练损失、精度、mAP绘图功能 | 支持多结果对比,多结果绘在一个图片(消融实验、科研必备)

一、本文介绍 本文给大家带来的是YOLOv9系列的绘图功能&#xff0c;我将向大家介绍YOLO系列的绘图功能。我们在进行实验时&#xff0c;经常需要比较多个结果&#xff0c;针对这一问题&#xff0c;我写了点代码来解决这个问题&#xff0c;它可以根据训练结果绘制损失(loss)和mA…

怎样用PHP语言实现远程控制三路开关

怎样用PHP语言实现远程控制三路开关呢&#xff1f; 本文描述了使用PHP语言调用HTTP接口&#xff0c;实现控制三路开关&#xff0c;三路开关可控制三路照明、排风扇等电器。 可选用产品&#xff1a;可根据实际场景需求&#xff0c;选择对应的规格 序号设备名称厂商1智能WiFi墙…