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

【C++】面向对象的三大特性

面向对象编程三大核心特性:封装、继承和多态。

1. 封装

封装指的是将数据操作这些数据的方法绑定在一起,形成一个对象,并且隐藏对象的内部实现细节,只暴露必要的接口。封装的目的是保护数据,确保外部代码不能直接访问对象的内部状态,只有通过对象提供的方法才能与数据交互。

class Person {
private:int age; // 仅在类内部访问
public:void setAge(int a) { // 通过方法设置数据if (a >= 0) age = a;}int getAge() { // 通过方法获取数据return age;}
};

2. 继承

继承允许一个类从另一个类中继承属性和方法。通过继承,子类能够复用父类的代码,并且可以对父类的方法进行扩展和修改。

  • 优势

    • 代码复用:子类继承父类后,能够使用父类的已有功能,避免重复编写相同的代码。
    • 可扩展性:子类可以在继承的基础上增加新的功能或修改父类的行为。
class Animal {
public:void eat() {std::cout << "Eating...\n";}
};class Dog : public Animal {
public:void bark() {std::cout << "Barking...\n";}
};Dog dog;
dog.eat(); // 从Animal继承的方法
dog.bark(); // Dog类的方法

3.多态

多态是指同一操作作用于不同的对象上,可以表现出不同的行为。多态可以通过方法重载(函数签名不同)和方法重写(子类修改父类方法的实现)来实现。

优势

  • 提高了代码的灵活性和可维护性,程序在运行时可以决定调用哪个版本的函数。
  • 通过多态可以写出更加通用和可扩展的代码,减少了冗余。
class Shape {
public:virtual void draw() { // 虚函数,允许子类重写std::cout << "Drawing a shape\n";}
};class Circle : public Shape {
public:void draw() override { // 重写父类的方法std::cout << "Drawing a circle\n";}
};class Square : public Shape {
public:void draw() override { // 重写父类的方法std::cout << "Drawing a square\n";}
};void drawShape(Shape* shape) {shape->draw(); // 根据传入的具体类型调用不同的draw方法
}int main() {Shape* shape1 = new Circle();Shape* shape2 = new Square();drawShape(shape1); // 输出: Drawing a circledrawShape(shape2); // 输出: Drawing a squarereturn 0;
}

总结:

  • 封装:通过隐藏实现细节和暴露接口来保护数据,确保对象的内部状态不被随意修改。
  • 继承:子类可以继承父类的属性和方法,复用代码并扩展功能。
  • 多态:同一接口可以根据不同对象表现出不同的行为,提高了代码的灵活性和扩展性。

相关文章:

【C++】面向对象的三大特性

面向对象编程三大核心特性&#xff1a;封装、继承和多态。 1. 封装 封装指的是将数据和操作这些数据的方法绑定在一起&#xff0c;形成一个对象&#xff0c;并且隐藏对象的内部实现细节&#xff0c;只暴露必要的接口。封装的目的是保护数据&#xff0c;确保外部代码不能直接访…...

Docker构建时,设定默认进入的工作目录的方法

在 Docker 中,你可以通过不同的方式来设定容器默认进入的目录,以下针对不同场景分别介绍具体方法: 1. 使用 Dockerfile 设定工作目录 如果你是通过构建镜像的方式来运行容器,那么可以在 Dockerfile 中使用 WORKDIR 指令来设置容器启动时的默认工作目录。以下是具体步骤:…...

DeepSeek等大模型功能集成到WPS中的详细步骤

记录下将**DeepSeek功能集成到WPS中**的步骤&#xff0c;以备忘。 1. 下载并安装OfficeAI插件 访问OfficeAI插件下载地址&#xff1a;https://www.office-ai.cn/&#xff0c;下载插件&#xff08;目前只支持windows系统&#xff09;。 注意&#xff0c;有两个插件&#xff0…...

教学资料档案管理系统

本系统构建 JAVA 体系的后端系统&#xff0c;围绕以安全&#xff0c;可靠&#xff0c;高速&#xff0c;健壮&#xff0c;易于扩展为目标的方向进行开发&#xff0c;在阿里等开源库的基础上实现提供教学资料档案的管理系统的后端接口的微服务架构系统。 功能包含&#xff1a;系…...

linux core分析---TLS读取异常

文章目录 TLS概念core 线程调用栈查看堆栈: bt查看所有线程堆栈:core分析:锁分析代码修改:thread8 f 4 (第四层堆栈) jcallback.c:186**thread10 f4 SynStack.cpp:1175tl_send_message 加锁修改tls_table1 socket_tab加锁保护2 增加tls_table 中buse的使用3 tls_tl_read_mes…...

SpringBoot 排除一些包的注入

文章目录 需求一、使用 ComponentScan 需求 在系统迭代的过程中&#xff0c;有一些 Controller 大批量的不再使用&#xff0c;或者有一些接口我们不想再提供给外界 一、使用 ComponentScan SpringBootApplication(scanBasePackages "com.zrb.excludeSomePkg") Comp…...

PHP Composer:高效项目依赖管理工具详解

PHP Composer:高效项目依赖管理工具详解 引言 随着Web开发领域的不断扩展,项目的复杂性也在逐渐增加。为了提高开发效率,减少重复劳动,依赖管理工具应运而生。其中,PHP的Composer成为了开发者们的首选。本文将详细介绍PHP Composer的功能、使用方法以及在实际开发中的应…...

第四届图像、信号处理与模式识别国际学术会议(ISPP 2025)

重要信息 大会官网&#xff1a;www.icispp.com 大会时间&#xff1a;2025年3月28日-30日 大会地点&#xff1a;南京 简介 由河海大学和江苏大学联合主办的第四届图像、信号处理与模式识别&#xff08;ISPP 2025) 将于2025年3月28日-30日在中国南京举行。主要围绕图像信号处…...

【设计模式精讲】创建型模式之工厂方法模式(简单工厂、工厂方法)

文章目录 第四章 创建型模式4.2 工厂方法模式4.2.1 需求: 模拟发放奖品业务4.2.2 原始开发方式4.2.3 简单工厂模式4.2.3.1 简单工厂模式介绍4.2.3.2 简单工厂原理4.2.3.3 简单工厂模式重构代码4.2.3.4 简单工厂模式总结 4.2.4 工厂方法模式4.2.4.1 工厂方法模式介绍4.2.4.2 工厂…...

python:多重继承、MRO(方法解析顺序)

在 Python 中&#xff0c;当类存在多重继承时&#xff0c;方法的调用顺序由 方法解析顺序&#xff08;Method Resolution Order, MRO&#xff09; 决定。 Python 使用 C3线性化算法 来确定类的继承顺序&#xff08;MRO&#xff09;&#xff0c;其核心规则是&#xff1a; 子类优…...

Oracle RAC数据库单节点轮流重启

0、sqlplus / as sysdba 备份参数文件 create pfile/home/oracle/pfile.ora from spfile; 备份控制文件 Alter database backup controlfile to trace; 1、关闭两节点的监听&#xff1b; 2、操作系统层面kill掉所有LOCALNO的所有进程&#xff0c;即&#xff1a;连接会话。 p…...

电脑想安装 Windows 11 需要开启 TPM 2.0 怎么办?

尽管 TPM 2.0 已经内置在许多新电脑中&#xff0c;但很多人并不知道如何激活这一功能&#xff0c;甚至完全忽略了它的存在。其实&#xff0c;只需简单的几步操作&#xff0c;你就能开启这项强大的安全特性&#xff0c;为你的数字生活增添一层坚固的防护屏障。无论你是普通用户还…...

Vue 3 中如何注册全局自定义组件:一个 SVG 图标的例子

Vue 3 中如何注册全局自定义组件&#xff1a;一个 SVG 图标的例子 嘿&#xff0c;小伙伴们&#xff01;今天我们来聊一下在 Vue 3 中如何注册一个全局的自定义组件。我知道有时候我们想要重复使用某些组件&#xff0c;比如说 SVG 图标&#xff0c;但不想在每个地方都重新定义。…...

SpringBoot+Vue3-学习笔记

1、SpringBoot特性 ①起步依赖&#xff0c;所有需要的依赖全部配置在一起 ②自动配置&#xff1a;遵循约定大约配置的原则&#xff0c;在boot程序启动后&#xff0c;一些bean对象会自动注入到ioc容器&#xff0c;不需要手动声明&#xff0c;简化开发 ③内嵌的Tomcat、Jetty(无…...

银河麒麟系统安装mysql5.7【亲测可行】

一、安装环境 cpu&#xff1a;I5-10代&#xff1b; 主板&#xff1a;华硕&#xff1b; OS&#xff1a;银河麒麟V10&#xff08;SP1&#xff09;未激活 架构&#xff1a;Linux 5.10.0-9-generic x86_64 GNU/Linux mysql版本&#xff1a;mysql-5.7.34-linux-glibc2.12-x86_64.ta…...

为什么WP建站更适合于谷歌SEO优化?

在当今数字时代&#xff0c;建立一个网站似乎变得容易&#xff0c;但要构建一个真正能够带来流量和订单的网站却并非易事。特别是在谷歌SEO优化方面&#xff0c;不同的建站程序在SEO支持方面的效果差异显著。对于希望提升搜索引擎表现的用户来说&#xff0c;WordPress无疑是最佳…...

ue----git局域网内部署裸仓库,别的机器进行访问

最近由于经常迁移项目到另一台机器上进行部署更新一点就要整个迁移 弄得麻烦了 就在网上学了一下这个方式 首先我们在想要建立裸仓库的电脑上找到一个文件夹放置我们的裸仓库 在此点击鼠标右键选择 open git bash here 输入命令 创裸仓库 git init --bare gitTestName.git…...

leetcode876.链表的中间结点

目录 问题描述示例提示 具体思路思路一 代码实现 问题描述 给你单链表的头结点 head &#xff0c;请你找出并返回链表的中间结点。 如果有两个中间结点&#xff0c;则返回第二个中间结点。 题目链接&#xff1a;链表的中间结点 示例 提示 链表的结点数范围是 [1, 100]   1 &…...

旧手机热点无法提供ipv6解决方法(emui 8 热点提供ipv6)

旧手机热点无法提供ipv6解决方法 手机&#xff1a;荣耀8x 系统版本: EMUI 8 网络&#xff1a;移动流量卡 解决方案 设置-》无线和网络-》移动网络-》接入点名称(APN)-》cmiot 修改 APN协议: IPv4/IPv6 修改 APN漫游协议: IPv4/IPv6...

解决DeepSeek服务器繁忙问题的实用指南

目录 简述 1. 关于服务器繁忙 1.1 服务器负载与资源限制 1.2 会话管理与连接机制 1.3 客户端配置与网络问题 2. 关于DeepSeek服务的备用选项 2.1 纳米AI搜索 2.2 硅基流动 2.3 秘塔AI搜索 2.4 字节跳动火山引擎 2.5 百度云千帆 2.6 英伟达NIM 2.7 Groq 2.8 Firew…...

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…...

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...

使用分级同态加密防御梯度泄漏

抽象 联邦学习 &#xff08;FL&#xff09; 支持跨分布式客户端进行协作模型训练&#xff0c;而无需共享原始数据&#xff0c;这使其成为在互联和自动驾驶汽车 &#xff08;CAV&#xff09; 等领域保护隐私的机器学习的一种很有前途的方法。然而&#xff0c;最近的研究表明&…...

第25节 Node.js 断言测试

Node.js的assert模块主要用于编写程序的单元测试时使用&#xff0c;通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试&#xff0c;通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...

【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具

第2章 虚拟机性能监控&#xff0c;故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令&#xff1a;jps [options] [hostid] 功能&#xff1a;本地虚拟机进程显示进程ID&#xff08;与ps相同&#xff09;&#xff0c;可同时显示主类&#x…...

图表类系列各种样式PPT模版分享

图标图表系列PPT模版&#xff0c;柱状图PPT模版&#xff0c;线状图PPT模版&#xff0c;折线图PPT模版&#xff0c;饼状图PPT模版&#xff0c;雷达图PPT模版&#xff0c;树状图PPT模版 图表类系列各种样式PPT模版分享&#xff1a;图表系列PPT模板https://pan.quark.cn/s/20d40aa…...

C++课设:简易日历程序(支持传统节假日 + 二十四节气 + 个人纪念日管理)

名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏介绍:《编程项目实战》 目录 一、为什么要开发一个日历程序?1. 深入理解时间算法2. 练习面向对象设计3. 学习数据结构应用二、核心算法深度解析…...

客户案例 | 短视频点播企业海外视频加速与成本优化:MediaPackage+Cloudfront 技术重构实践

01技术背景与业务挑战 某短视频点播企业深耕国内用户市场&#xff0c;但其后台应用系统部署于东南亚印尼 IDC 机房。 随着业务规模扩大&#xff0c;传统架构已较难满足当前企业发展的需求&#xff0c;企业面临着三重挑战&#xff1a; ① 业务&#xff1a;国内用户访问海外服…...

【Java多线程从青铜到王者】单例设计模式(八)

wait和sleep的区别 我们的wait也是提供了一个还有超时时间的版本&#xff0c;sleep也是可以指定时间的&#xff0c;也就是说时间一到就会解除阻塞&#xff0c;继续执行 wait和sleep都能被提前唤醒(虽然时间还没有到也可以提前唤醒)&#xff0c;wait能被notify提前唤醒&#xf…...

简单介绍C++中 string与wstring

在C中&#xff0c;string和wstring是两种用于处理不同字符编码的字符串类型&#xff0c;分别基于char和wchar_t字符类型。以下是它们的详细说明和对比&#xff1a; 1. 基础定义 string 类型&#xff1a;std::string 字符类型&#xff1a;char&#xff08;通常为8位&#xff09…...