C/C++ - 面向对象编程

面向对象

  • 面向过程编程:

    1. 数据和函数分离:在C语言中,数据和函数是分开定义和操作的。数据是通过全局变量或传递给函数的参数来传递的,函数则独立于数据。
    2. 函数为主导:C语言以函数为主导,程序的执行流程由函数调用和返回来控制。
    3. 缺乏封装性:C语言中没有类和对象的概念,无法将数据和相关函数封装在一起。数据和函数在代码中是松散组织的。
  • 面向对象编程:

    1. 类和对象:C++引入了类和对象的概念,允许将数据和操作数据的函数封装在一起。类是一个模板,用于创建对象的实例。
    2. 封装和数据隐藏:C++中的类提供了封装的机制,可以将数据和相关函数封装在类的内部,并限制对类的私有成员的访问。这样可以隐藏数据的具体实现细节,提高代码的安全性和可维护性。
    3. 继承:C++支持继承机制,允许创建新的类(派生类)通过继承现有类(基类)的属性和行为。继承可以实现代码的重用和扩展。
    4. 多态性:C++支持多态性,允许通过虚函数和函数重写实现在不同对象上执行相同的操作产生不同的行为。这提供了更灵活和可扩展的代码设计。
    5. 动态内存管理:C++提供了new和delete操作符,用于动态分配和释放内存。这使得在运行时动态创建、修改和销毁对象成为可能。
  • 人把大象放进冰箱

    • 面向过程

      • 打开冰箱
      • 放进大象
      • 关闭冰箱
    • 面向对象

      • 人 - 冰箱 - 大象(对象)
      • 人 - 打开和关闭冰箱,将物品放入冰箱
      • 冰箱 - 开门以及关门
      • 大象 - 进入冰箱属性

类结构体

  • 相同点

    1. 成员变量:类和结构体都可以包含成员变量,用于存储数据。
    2. 成员函数:类和结构体都可以包含成员函数,用于操作数据和提供其他功能。
    3. 访问修饰符:类和结构体都可以使用访问修饰符(public、private、protected)来控制成员的访问权限。
    4. 对象实例化:类和结构体都可以通过创建对象的实例来使用。
  • 不同点

    1. 默认访问修饰符:类的默认访问修饰符是"private",而结构体的默认访问修饰符是"public"。
    2. 继承:类支持继承机制,可以通过继承实现类与类之间的关系,而结构体不支持继承。
    3. 对象的拷贝:通过赋值操作符("=")或拷贝构造函数创建类对象的副本时,会复制对象的状态和数据。而结构体对象的拷贝只是简单地复制值。
  • 示例

    #include <iostream>typedef struct _Person
    {
    public: //公共属性 -> 结构体内外都可以访问//成员变量(对象属性)int m_Sex;	//0 = nan 1 = nvint m_Age;//成员函数void SetAge(int age){m_Age = age;}int GetAge(){return m_Age;}}Person, *PPerson;class Animal
    {
    private: //私有属性 -> 类内部可以访问,类外部不可以访问//成员变量(对象属性)int m_Sex;	//0 = nan 1 = nvint m_Age;public://成员函数void SetAge(int age){m_Age = age;}int GetAge(){return m_Age;}
    };int main()
    {//结构体Person p1 = { 0 };p1.m_Age = 18;p1.m_Sex = 0;printf("age -> %d sex -> %s \r\n", p1.m_Age, (p1.m_Sex == 0 ? "男" : "女"));Person p2 = { 0 };p2.SetAge(20);std::cout << p2.GetAge() << std::endl;//类Animal Dog;Dog.SetAge(1);std::cout << Dog.GetAge() << std::endl;return 0;
    }
    

        

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

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

相关文章

外卖跑腿系统开发:构建高效、安全的服务平台

在当今快节奏的生活中&#xff0c;外卖跑腿系统的开发已成为技术领域的一个重要课题。本文将介绍如何使用一些常见的编程语言和技术框架&#xff0c;构建一个高效、安全的外卖跑腿系统。 1. 技术选择 在开始开发之前&#xff0c;我们需要选择适合的技术栈。常用的技术包括&a…

Java聚类分析

聚类 聚类1 解决什么问题KMean聚类Kmedoids聚类2 java实现计算二维点的聚类案例KMean实现输出 K-medoids实现输出 聚类 1 解决什么问题 假设二维坐标轴上有一些点&#xff0c;现在让你把这些点分个类。于是对我们来说&#xff0c;这个分类似乎就是把距离相近的点画到一类中去。…

DDT数据驱动测试

简单介绍 ​ DDT&#xff08;Date Driver Test&#xff09;&#xff0c;所谓数据驱动测试&#xff0c; 简单来说就是由数据的改变从而驱动自动化测试的执行&#xff0c;最终引起测试结果的改变。通过使用数据驱动测试的方法&#xff0c;可以在需要验证多组数据测试场景中&…

【LeetCode-452】用最少数量的箭引爆气球(贪心)

LeetCode452.用最少数量的箭引爆气球 题目描述 原题链接 在二维空间中有许多球形的气球。对于每个气球&#xff0c;提供的输入是水平方向上&#xff0c;气球直径的开始和结束坐标。由于它是水平的&#xff0c;所以纵坐标并不重要&#xff0c;因此只要知道开始和结束的横坐标…

详细分析Java的树形工具类(含注释)

目录 前言1. 基本框架2. 实战应用 前言 对应的每个子孙属于该父亲&#xff0c;这其实是数据结构的基础知识&#xff0c;那怎么划分怎么归属呢 对应的基本知识推荐如下&#xff1a; 【数据结构】树和二叉树详细分析&#xff08;全&#xff09;【数据结构】B树和B树的笔记详细…

面试 HTML 框架八股文十问十答第一期

面试 HTML 框架八股文十问十答第一期 作者&#xff1a;程序员小白条&#xff0c;个人博客 相信看了本文后&#xff0c;对你的面试是有一定帮助的&#xff01;关注专栏后就能收到持续更新&#xff01; ⭐点赞⭐收藏⭐不迷路&#xff01;⭐ 1&#xff09;src和href的区别 src和…

数据结构与算法教程,数据结构C语言版教程!(第六部分、数据结构树,树存储结构详解)二

第六部分、数据结构树&#xff0c;树存储结构详解 数据结构的树存储结构&#xff0c;常用于存储逻辑关系为 "一对多" 的数据。 树存储结构中&#xff0c;最常用的还是二叉树&#xff0c;本章就二叉树的存储结构、二叉树的前序、中序、后序以及层次遍历、线索二叉树、…

300. 最长递增子序列(动态规划)

动态规划&#xff1a; 状态定义&#xff1a;dp[i]表示以索引为第i个字符结尾的最长递增子序列的长度&#xff0c;d[n-1]表示以第n-1个字符作为结尾的最长递增子序列的长度&#xff0c;但是这并不是答案&#xff0c;因为整个序列中的最长递增子序列不一定以n-1结尾&#xff0c;…

Docker部署思维导图工具SimpleMindMap并实现公网远程访问

文章目录 1. Docker一键部署思维导图2. 本地访问测试3. Linux安装Cpolar4. 配置公网地址5. 远程访问思维导图6. 固定Cpolar公网地址7. 固定地址访问 SimpleMindMap 是一个可私有部署的web思维导图工具。它提供了丰富的功能和特性&#xff0c;包含插件化架构、多种结构类型&…

如何重置某个css属性值(unset)

场景 你用了别人的UI框架&#xff0c;然后你发现&#xff0c;你给css动态赋的值&#xff0c;被UI框架的优先级更高的css覆盖了。你可以写js来改变它&#xff0c;但是如果有很多层循环操作&#xff0c;你需要写一大段的js&#xff0c;此时js并不是最优的选择&#xff0c;你真正…

【Unicode】Character ‘ENQUIRY‘ (U+0005)

询问 result.append("\u0005");Unicode Character ‘ENQUIRY’ (U0005)

js中字符串string,遍历json/Object【匹配url、邮箱、电话,版本号,千位分割,判断回文】

目录 正则 合法的URL 邮箱、电话 字符串方法 千位分割&#xff1a;num.slice(render, len).match(/\d{3}/g).join(,) 版本号比较 判断回文 json/Object 遍历 自身属性 for...inhasOwnProperty(key) Object.获取数组(obj)&#xff1a;Object.keys&#xff0c;Object…

深度强化学习(王树森)笔记02

深度强化学习&#xff08;DRL&#xff09; 本文是学习笔记&#xff0c;如有侵权&#xff0c;请联系删除。本文在ChatGPT辅助下完成。 参考链接 Deep Reinforcement Learning官方链接&#xff1a;https://github.com/wangshusen/DRL 源代码链接&#xff1a;https://github.c…

taro3 + vue3 + ts 跨平台体验记录

taro3 vue3 ts 跨平台体验记录&#xff0c;根据进度不定期更新。 目标平台包含&#xff1a;H5、微信小程序、APP。开发环境&#xff1a;windows 安装cli【官方安装文档】 npm install -g tarojs/cli常用命令 // 查看taro版本 npm info tarojs/cli创建demo项目 taro init…

Python+appium自动化测试总结

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 关注公众号【互联网杂货铺】&#xff0c;回复 1 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 前言 pythonappium自动化测试系列就要告一段落了&#xff0c;本…

spring-boot redis stream消息队列demo-及死信简单处理

Redis stream 是 Redis 5 引入的一种新的数据结构&#xff0c;它是一个高性能、高可靠性的消息队列&#xff0c;主要用于异步消息处理和流式数据处理。在此之前&#xff0c;想要使用 Redis 实现消息队列&#xff0c;通常可以使用例如&#xff1a;列表&#xff0c;有序集合、发布…

【C++】istream类型对象转换为逻辑条件判断值

前言 大家好吖&#xff0c;欢迎来到 YY 滴 系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过C的老铁 主要内容含&#xff1a; 欢迎订阅 YY滴C专栏&#xff01;更多干货持续更新&#xff01;以下是传送门&#xff01; YY的《C》专栏YY的《C11》专栏YY的《Linux》专…

使用 sorted set 实现令牌桶限流

业务场景为限制消息发送&#xff0c;要求每天不超过一次&#xff0c;每七天不超过三次。 Redission 的 RRateLimiter 虽然功能完备且支持自定义限流配置&#xff0c;但是每个限流器都需要维护三个 key&#xff0c;并且 lua 脚本中的判断逻辑较为复杂。 见&#xff1a;Redisso…

LiveGBS流媒体平台GB/T28181常见问题-如何快速查看推流上来的摄像头并停止摄像头推流?

LiveGBS流媒体平台GB/T28181常见问题-如何快速查看推流上来的摄像头并停止摄像头推流&#xff1f; 1、负载信息2、负载信息说明3、会话列表查看3.1、会话列表 4、停止会话5、搭建GB28181视频直播平台 1、负载信息 实时展示直播、回放、播放、录像、H265、级联等使用数目 2、负…

Python算法题集_接雨水

本文为Python算法题集之一的代码示例 题目42&#xff1a;接雨水 说明&#xff1a;给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水 示例 1&#xff1a; 输入&#xff1a;height [0,1,0,2,1,0,1,3,2,1,2,1]…