当前位置: 首页 > news >正文

C++中面向对象的三大特性是什么?

封装(Encapsulation)

  • 概念:封装是把数据和操作数据的函数绑定在一起,对数据的访问进行限制。通过将数据成员设为私有(private)或受保护(protected),并提供公共(public)的成员函数来访问和修改这些数据,从而隐藏了对象的内部实现细节。
  • 示例
    class Rectangle {
    private:int length;int width;
    public:int getLength() { return length; }int getWidth() { return width; }void setLength(int l) {if (l > 0) length = l;}void setWidth(int w) {if (w > 0) width = w;}int area() { return length * width; }
    };

    • 在这个Rectangle类中,lengthwidth是私有数据成员,外部代码不能直接访问它们。通过getLengthgetWidthsetLengthsetWidth这些公共成员函数来间接访问和修改数据,这样就实现了对数据的封装,保证了数据的安全性和完整性。
  • 继承(Inheritance)
    • 概念:继承允许创建一个新的类(派生类或子类),它从现有的类(基类或父类)继承属性和行为。这有助于代码的复用和扩展,派生类可以继承基类的成员变量和成员函数,并且可以根据需要添加新的成员变量和成员函数或者重写(override)基类的函数。
    • 示例
      class Shape {
      public:virtual void draw() {std::cout << "Drawing a shape." << std::endl;}
      };
      class Circle : public Shape {
      public:void draw() override {std::cout << "Drawing a circle." << std::endl;}
      };

      • 在这里,Circle类继承自Shape类。Shape类有一个draw函数,Circle类重写了这个draw函数,以提供特定于圆形的绘制行为。继承关系使得Circle类可以继承Shape类的特性,同时又能根据自身特点进行定制。
    • 多态(Polymorphism)
      • 概念:多态是指同一种操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。在 C++ 中有两种多态性:编译时多态(函数重载和模板)和运行时多态(虚函数)。运行时多态通过虚函数和指向基类的指针或引用实现,使得程序能够根据对象的实际类型来调用相应的函数。
      • 示例(运行时多态)
        Shape* shapePtr = new Circle();
        shapePtr->draw();
      • 当通过基类指针shapePtr(它实际指向一个Circle对象)调用draw函数时,由于draw函数在Shape类中是虚函数,并且Circle类重写了这个函数,所以会调用Circle类中的draw函数,而不是Shape类中的draw函数。这体现了运行时多态,程序在运行时根据对象的实际类型来决定调用哪个函数。

相关文章:

C++中面向对象的三大特性是什么?

封装&#xff08;Encapsulation&#xff09; 概念&#xff1a;封装是把数据和操作数据的函数绑定在一起&#xff0c;对数据的访问进行限制。通过将数据成员设为私有&#xff08;private&#xff09;或受保护&#xff08;protected&#xff09;&#xff0c;并提供公共&#xff…...

Centos 修改 yum 源为阿里云

参考 https://serverfault.com/questions/1161816/mirrorlist-centos-org-no-longer-resolve 修改 Centos 的 yum 源为阿里云 去阿里云 yum 镜像源官网&#xff1a; https://developer.aliyun.com/mirror/ 选择自己对应的操作系统&#xff0c;这里以 centos7 演示&#xf…...

Qt之Cannot create children for a parent that is in a different thread问题分析

问题 在多线程场景中&#xff0c;使用QSerialPort,QTcpSocket等QIODevice设备时出现报Cannot create children for a parent that is in a different thread 分析 QObject构造函数中会检查父对象的线程数据与当前对象的线程数据是否一致 static bool check_parent_thread(Q…...

均值滤波从图像复原角度的解释

廖老师说若将图像生成看作一个随机过程&#xff0c;均值滤波&#xff08;Mean Filtering&#xff09;可以视为在高斯噪声模型下的线性最小均方估计&#xff08;Linear Minimum Mean Squared Error, LMMSE&#xff09;或者极大似然估计&#xff08;Maximum Likelihood Estimatio…...

Tableau数据可视化与仪表盘搭建-数据连接

目录 连接本地文件 课程操作 连接方式&#xff08;实时/数据提取&#xff09; 保存工作簿 筛选器 数据处理 连接数据有三种类型 第一种&#xff0c;连接到本地文件&#xff0c;例如Excel&#xff0c;csv&#xff0c;JSON等 第二种&#xff0c;连接到数据库&#xff0c;例…...

VsCode对Arduino的开发配置

ps&#xff1a;我的情况是在对esp32进行编译、烧录时&#xff0c;找不到按钮&#xff0c;无法识别Arduino文件&#xff0c;适合已经有ini文件的情况。 1.在vscode中安装拓展 2.打开设置&#xff0c;点击右上角&#xff0c;转到settings.json文件 3.复制以下代码并保存 {"…...

2024版idea 插件无法加载

解决方法&#xff1a; 进入Settings 点击plugins 选择 HTTP Proxy Settings 设置成如图所示...

VLMs之Agent之CogAgent:CogAgent的简介、安装和使用方法、案例应用之详细攻略

VLMs之Agent之CogAgent&#xff1a;CogAgent的简介、安装和使用方法、案例应用之详细攻略 导读&#xff1a;在2024年末&#xff0c;智谱于11月29日正式提出了GLM-OS概念&#xff0c;并推出了两款Agent产品——AutoGLM和GLM-PC。为了促进大模型Agent生态的发展&#xff0c;智谱决…...

Unity3D仿星露谷物语开发19之库存栏丢弃及交互道具

1、目标 从库存栏中把道具拖到游戏场景中&#xff0c;库存栏中道具数相应做减法或者删除道具。同时在库存栏中可以交换两个道具的位置。 2、UIInventorySlot设置Raycast属性 在UIInventorySlot中&#xff0c;我们只希望最外层的UIInventorySlot响应Raycast&#xff0c;他下面…...

Kafka优势剖析-消费者组、并行消费

目录 1. 消费者组&#xff08;Consumer Group&#xff09; 1.1 什么是消费者组&#xff1f; 1.2 消费者组的工作原理 1.3 消费者组的优势 2. 并行消费&#xff08;Parallel Consumption&#xff09; 2.1 什么是并行消费&#xff1f; 2.2 并行消费的工作原理 2.3 并行消…...

Docker+Jmeter+InfluxDB+Grafana 搭建性能监控平台

当今互联网发展迅速&#xff0c;应用程序的性能监控显得越来越重要。 DockerJmeterInfluxDBGrafana 是一种常用的性能监控平台&#xff0c;可以帮助开发者快速搭建一套可靠的监控体系。在本文中&#xff0c;我们将介绍如何使用这些工具搭建性能监控平台&#xff0c;以便开发人…...

Maven 详细配置:Maven settings 配置文件的详细说明

Maven settings 配置文件是 Maven 环境的重要组成部分&#xff0c;它用于定义用户特定的配置信息和全局设置&#xff0c;例如本地仓库路径、远程仓库镜像、代理服务器以及认证信息等。settings 文件分为全局配置文件&#xff08;settings.xml&#xff09;和用户配置文件&#x…...

【文本分类】bert二分类

import os import torch from torch.utils.data import DataLoader, Dataset from transformers import BertTokenizer, BertForSequenceClassification, AdamW from sklearn.metrics import accuracy_score, classification_report from tqdm import tqdm# 自定义数据集 class…...

单例模式-如何保证全局唯一性?

以下是几种实现单例模式并保证全局唯一性的方法&#xff1a; 1. 饿汉式单例模式 class Singleton { private:// 私有构造函数&#xff0c;防止外部创建对象Singleton() {}// 静态成员变量&#xff0c;存储单例对象static Singleton instance; public:// 公有静态成员函数&…...

设计模式学习笔记——结构型模式

文章目录 适配器模式 Adapter适用场景UML 桥接模式 Bridge适用场景UML 组合模式 Composite装饰模式 Decorator外观模式 Facade享元模式 Flyweight代理模式 Proxy 适配器模式 Adapter 适用场景 希望使用某个类&#xff0c; 但是其接口与其他代码不兼容时&#xff0c; 可以使用…...

WEB攻防-通用漏洞_文件上传_黑白盒审计流程

目录 前置知识点 Finecms-CMS文件上传 ​编辑 Cuppa-Cms文件上传 Metinfo-CMS 文件上传 前置知识点 思路&#xff1a; 黑盒就是寻找一切存在文件上传的功能应用 1 、个人用户中心是否存在文件上传功能 2 、后台管理系统是否存在文件上传功能 3 、字典目录扫描探针文件上传构…...

RabbitMQ基本介绍及简单上手

&#xff08;一&#xff09;什么是MQ MQ&#xff08;message queue&#xff09;本质上是队列&#xff0c;满足先入先出&#xff0c;只不过队列中存放的内容是消息而已&#xff0c;那什么是消息呢&#xff1f; 消息可以是字符串&#xff0c;json也可以是一些复杂对象 我们应用场…...

服务器证书不受信任是什么问题?

用户在访问某些网站时&#xff0c;可能会遇到“服务器证书不受信任”的警告。这一问题不仅影响用户的浏览体验&#xff0c;更可能对网站的信誉和安全性产生深远影响。那么服务器证书不受信任是什么问题呢&#xff1f; 服务器证书的基本概念 服务器证书是由证书颁发机构(CA)签…...

spring mvc源码学习笔记之十

前面的文章介绍了用 WebApplicationInitializer 或者 AbstractAnnotationConfigDispatcherServletInitializer 来代替 web.xml 。 我们学 java web 的时候就知道&#xff0c;servlet 容器会自动加载 web.xml。 那么&#xff0c;疑问就来了&#xff0c;WebApplicationInitialize…...

Ubuntu 下载安装 elasticsearch7.17.9

参考 https://blog.csdn.net/qq_26039331/article/details/115024218 https://blog.csdn.net/mengo1234/article/details/104989382 过程 来到 Es 的版本发布列表页面&#xff1a;https://www.elastic.co/downloads/past-releases#elasticsearch 根据自己的系统以及要安装的…...

vscode里如何用git

打开vs终端执行如下&#xff1a; 1 初始化 Git 仓库&#xff08;如果尚未初始化&#xff09; git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...

MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例

一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...

python/java环境配置

环境变量放一起 python&#xff1a; 1.首先下载Python Python下载地址&#xff1a;Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个&#xff0c;然后自定义&#xff0c;全选 可以把前4个选上 3.环境配置 1&#xff09;搜高级系统设置 2…...

2.Vue编写一个app

1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...

在Ubuntu中设置开机自动运行(sudo)指令的指南

在Ubuntu系统中&#xff0c;有时需要在系统启动时自动执行某些命令&#xff0c;特别是需要 sudo权限的指令。为了实现这一功能&#xff0c;可以使用多种方法&#xff0c;包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法&#xff0c;并提供…...

uniapp中使用aixos 报错

问题&#xff1a; 在uniapp中使用aixos&#xff0c;运行后报如下错误&#xff1a; AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...

css3笔记 (1) 自用

outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size&#xff1a;0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格&#xff…...

ArcGIS Pro制作水平横向图例+多级标注

今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作&#xff1a;ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等&#xff08;ArcGIS出图图例8大技巧&#xff09;&#xff0c;那这次我们看看ArcGIS Pro如何更加快捷的操作。…...

Java面试专项一-准备篇

一、企业简历筛选规则 一般企业的简历筛选流程&#xff1a;首先由HR先筛选一部分简历后&#xff0c;在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如&#xff1a;Boss直聘&#xff08;招聘方平台&#xff09; 直接按照条件进行筛选 例如&#xff1a…...

Map相关知识

数据结构 二叉树 二叉树&#xff0c;顾名思义&#xff0c;每个节点最多有两个“叉”&#xff0c;也就是两个子节点&#xff0c;分别是左子 节点和右子节点。不过&#xff0c;二叉树并不要求每个节点都有两个子节点&#xff0c;有的节点只 有左子节点&#xff0c;有的节点只有…...