Day 12 C++ 面向对象

news/2024/11/24 11:35:03/

目录

什么是面向对象

 C++面向对象

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

封装

继承

多态

其他概念

构造函数和析构函数

运算符重载

动态内存管理

C++ 友元(friend)

C++对象模型和this指针


ps:本文章只是总结和大纲,详细知识请点击蓝字进相应的链接了解

什么是面向对象

面向对象编程(Object-Oriented Programming,简称OOP)是一种编程范式,它将程序的设计和实现以对象的思维方式进行组织。

面向对象编程的核心概念包括以下几个方面:

  1. 类(Class):类是面向对象编程的基本单位,它定义了一种具有相同属性和行为的对象的模板。类中包含了成员变量(属性)和成员函数(方法),用于描述对象的状态和行为。

  2. 对象(Object):对象是类的实例化,是具体的实体。通过创建对象,我们可以使用类中定义的属性和方法进行操作。对象具有自己的状态(由类的成员变量决定)和行为(由类的成员函数决定)。

  3. 封装(Encapsulation):封装是将数据和相关操作封装在一个对象中的过程,隐藏了实现的细节。通过封装,我们可以控制对对象内部数据的访问方式,提高安全性和代码的模块化。

  4. 继承(Inheritance):继承是指一个类可以派生出其他类,派生类(子类)可以继承父类的属性和方法,并可以在此基础上添加新的属性和方法。继承实现了类与类之间的关系,提供了代码重用和层次结构的表示。

  5. 多态(Polymorphism):多态是指不同的对象对相同的消息作出不同的响应。在多态中,可以通过基类的指针或引用调用派生类的方法,实现动态绑定和灵活的对象处理方式。

面向对象编程具有以下优点

  1. 可重用性:通过封装和继承的机制,可以更好地复用已有的代码,减少重复编写相似功能的工作量。

  2. 可维护性:面向对象的代码结构更加清晰、模块化,易于理解和修改,便于代码的维护和扩展。

  3. 抽象能力:通过将现实世界的实体抽象成类和对象,可以更好地描述和模拟问题领域,提高编程的表达力。

  4. 安全性和可靠性:封装和隐藏对象内部的实现细节,限制对对象的访问,增强了程序的安全性和可靠性。

面向对象编程在许多编程语言中得到广泛应用,如C++、Java、Python等。它提供了一种结构化的编程方式,能够更好地管理和组织复杂的代码,使开发更加高效和可靠。

 C++面向对象

C++就是一种面向对象的编程语言,类和对象是其核心概念之一,万事万物都皆为对象,对象上有其属性和行为

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

封装

是一种隐藏对象内部细节并提供公共接口的机制。在C++中,我们使用访问修饰符(public、private和protected)来控制成员变量和成员函数的可访问性。

继承

允许我们创建一个新类(称为派生类或子类),它从现有的类(称为基类或父类)继承属性和行为。通过继承,子类可以重用基类的代码,并可以添加自己的额外功能。

多态

允许使用相同的接口来处理不同类型的对象。在C++中,多态性可以通过虚函数和纯虚函数来实现。

其他概念

构造函数和析构函数

运算符重载


动态内存管理

C++ 友元(friend)

C++对象模型和this指针


http://www.ppmy.cn/news/1005977.html

相关文章

简单游戏截图_可控截取内容2

一个需求 我需要在场景中截取不同层级的截图(如只截模型或只截UI或只截外部相加看到的画面 或全都截或和Shader配合呈现人眼夜视仪热成像的画面切换) 将截图排到列表中,在场景UI中展示出来 如何做 相机要能够看到不同的画面 将当前帧画面存储下来 将存储的画面展示出…

HOT74-数组中的第K个最大元素

leetcode原题链接:数组中的第K个最大元素 题目描述 给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。 你必须设计并实现时间复杂度为 O…

go test

关于go test 报错 command-line-arguments go test 直接调用被测试go文件方法时候报错 command-line-arguments [command-line-arguments.test],这里已经明确指出了命令参数问题 PS E:\code\mqtt> go test .\client_test.go # command-line-arguments [comma…

【数据结构与算法——TypeScript】算法的复杂度分析、 数组和链表的对比

【数据结构与算法——TypeScript】 算法的复杂度分析 什么是算法复杂度(现实案例)? ❤️‍🔥 前面已经解释了什么是算法? 其实就是解决问题的一系列步骤操作、逻辑。 ✅ 对于同一个问题,我们往往有很多种解决思路和方法&#x…

DoIP学习笔记系列:(四)用CAPL脚本读取DID的关键点

文章目录 1. 如何在CAPL中读取DID?1.1 避坑如何新建CAPL工程,在此不再赘述,本章主要分享一下如何在CAPL中调用DoIP接口、diag接口进行DoIP和诊断的测试。 1. 如何在CAPL中读取DID? 通常在实际项目中,会有很多DID,各种版本号、各种观测量,如果手动点,显然很麻烦,如果要…

Filebeat+ELK 部署

目录 //在 Node1 节点上操作 1.安装 Filebeat 2.设置 filebeat 的主配置文件 3.在 Logstash 组件所在节点上新建一个 Logstash 配置文件 4.浏览器访问 http://192.168.193.40:5601 登录 Kibana,单击“Create In…

在vue项目中封装WebSockets请求

在Vue项目中封装WebSocket请求包括以下步骤: 1. 安装WebSocket库:首先,导入WebSocket库,例如vue-native-websocket或socket.io-client。根据项目需求选择适当的库,并根据官方文档进行安装和配置。 2. 创建WebSocket服务…

Redis 如何解决缓存雪崩、缓存击穿、缓存穿透难题

前言 Redis 作为一门热门的缓存技术,引入了缓存层,就会有缓存异常的三个问题,分别是缓存击穿、缓存穿透、缓存雪崩。我们用本篇文章来讲解下如何解决! 缓存击穿 缓存击穿: 指的是缓存中的某个热点数据过期了,但是此…