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 = nv
    	int 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 = nv
    	int 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.mfbz.cn/a/352700.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

复式记账的概念特点和记账规则

目录 一. 复式记账法二. 借贷记账法三. 借贷记账法的记账规则四. 复试记账法应用举例4.1 三栏式账户举例4.2 T型账户记录举例4.3 记账规则验证举例 \quad 一. 复式记账法 \quad 复式记账法是指对于任何一笔经济业务都要用相等的金额&#xff0c;在两个或两个以上的有关账户中进…

GIT使用,看它就够了

一、目的 Git的熟练使用是一个加分项&#xff0c;本文将对常用的Git命令做一个基本介绍&#xff0c;看了本篇文章&#xff0c;再也不会因为不会使用git而被嘲笑了。 二、设置与配置 在第一次调用Git到日常的微调和参考&#xff0c;用得最多的就是config和help命令。 2.1 gi…

4核16G幻兽帕鲁服务器性能测评,真牛

腾讯云幻兽帕鲁服务器4核16G14M配置&#xff0c;14M公网带宽&#xff0c;限制2500GB月流量&#xff0c;系统盘为220GB SSD盘&#xff0c;优惠价格66元1个月&#xff0c;277元3个月&#xff0c;支持4到8个玩家畅玩&#xff0c;地域可选择上海/北京/成都/南京/广州&#xff0c;腾…

第十六章 Spring cloud stream应用

文章目录 前言1、stream设计思想2、编码常用的注解3、编码步骤3.1、添加依赖3.2、修改配置文件3.3、生产3.4、消费3.5、延迟队列3.5.1、修改配置文件3.5.2、生产端3.5.2、消息确认机制 消费端 前言 https://github.com/spring-cloud/spring-cloud-stream-binder-rabbit 官方定…

GPT-SoVITS 本地搭建踩坑

GPT-SoVITS 本地搭建踩坑 前言搭建下载解压VSCode打开安装依赖包修改内容1.重新安装版本2.修改文件内容 运行总结 前言 传言GPT-SoVITS作为当前与BertVits2.3并列的TTS大模型&#xff0c;于是本地搭了一个&#xff0c;简单说一下坑。 搭建 下载 到GitHub点击此处下载 http…

【网站项目】基于SSM的246品牌手机销售信息系统

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

蓝桥杯——每日一练(简单题)

题目 给定n个十六进制正整数&#xff0c;输出它们对应的八进制数。 解析 一、通过input&#xff08;&#xff09;函数获得需要转化的数字个数 二、for循环的到数字 三、for循环先将16进制转化为10进制&#xff0c;再输出8进制 代码 运行结果

直线拟合(支持任意维空间的直线拟合,附代码)

文章目录 一、问题描述二、推导步骤三、 M A T L A B MATLAB MATLAB代码 一、问题描述 给定一系列的三维空间点 ( x i , y i , z i ) , i 1 , 2 , . . . , n (x_i,y_i,z_i),i1,2,...,n (xi​,yi​,zi​),i1,2,...,n&#xff0c;拟合得到直线的方程。本文的直线拟合方法适用于任…

如何用一根网线和51单片机做简单门禁[带破解器]

仓库:https://github.com/MartinxMax/Simple_Door 支持原创是您给我的最大动力… 原理 -基础设备代码程序- -Arduino爆破器程序 or 51爆破器程序- 任意选一个都可以用… —Arduino带TFT屏幕——— —51带LCD1602——— 基础设备的最大密码长度是0x7F&#xff0c;因为有一位…

10.Golang中的map

目录 概述map实践map声明代码 map使用代码 结束 概述 map实践 map声明 代码 package mainimport ("fmt" )func main() {// 声明方式1var map1 map[string]stringif map1 nil {fmt.Println("map1为空")}// 没有分配空间&#xff0c;是不能使用的// map…

Vulnhub-dc6

信息收集 # nmap -sn 192.168.1.0/24 -oN live.port Starting Nmap 7.94 ( https://nmap.org ) at 2024-01-25 14:39 CST Nmap scan report for 192.168.1.1 Host is up (0.00075s latency). MAC Address: 00:50:56:C0:00:08 (VMware) Nmap scan report for 192.168.1.2…

IS-IS:10 ISIS路由渗透

ISIS的非骨干区域&#xff0c;无明细路由&#xff0c;容易导致次优路径问题。可以引入明细路由。 在IS-IS 网络中&#xff0c;所有的 level-2 和 level-1-2 路由器构成了一个连续的骨干区域。 level-1区域必须且只能与骨干区域相连&#xff0c;不同 level-1 区域之间不能直接…

.NET高级面试指南专题一【委托和事件】

在C#中&#xff0c;委托&#xff08;Delegate&#xff09;和事件&#xff08;Event&#xff09;是两个重要的概念&#xff0c;它们通常用于实现事件驱动编程和回调机制。 委托定义&#xff1a; 委托是一个类&#xff0c;它定义了方法的类型&#xff0c;使得可以将方法当作另一个…

SpringMVC第六天(拦截器)

概念 拦截器(Interceptor)是一种动态拦截方法调用的机制&#xff0c;在SpringMVC中动态拦截控制器方法的执行 作用&#xff1a; 在指定的方法调用前后执行预先设定的代码 阻止原始方法的执行 拦截器与过滤器的区别 归属不同&#xff1a;Filter属于Servlet技术&#xff0c;I…

递归方法猴子吃桃问题

public class A {public static void main(String[] args) {System.out.println("第一天有&#xff1a;"f(1)"个");System.out.println("第二天有&#xff1a;"f(2)"个");System.out.println(".....");System.out.println(&…

【揭秘】ForkJoinTask全面解析

内容摘要 ForkJoinTask的显著优点在于其高效的并行处理能力&#xff0c;它能够将复杂任务拆分成多个子任务&#xff0c;并利用多核处理器同时执行&#xff0c;从而显著提升计算性能&#xff0c;此外&#xff0c;ForkJoinTask还提供了简洁的API和强大的任务管理机制&#xff0c…

保姆级教学:Java项目从0到1部署到云服务器

目录 1、明确内容 2、apt 2.1、apt 语法 2.2、常用命令 2.3、更新apt 3、安装JDK17 4、安装MySQL 4.1、安装 4.2、检查版本及安装位置 4.3、初始化MySQL配置⭐ 4.4、检查状态 4.5、配置远程访问⭐ 4.6、登录MySQL 4.7、测试数据库 4.8、设置权限与密码⭐ 5、安…

cmake工具的安装

1、简介 CMake 是一个开源的、跨平台的自动化建构系统。它用配置文件控制编译过程的方式和Unix的make相似&#xff0c;只是CMake并不依赖特定的编译器。CMake并不直接建构出最终的软件&#xff0c;而是产生标准的建构文件&#xff08;如 Unix 的 Makefile 或 Windows Visual C …

GPT 如何不挂VPN使用

1、下载 Home | Tampermonkey 将下载的文件tampermonkey_stable.crx 拖到上面的扩展程序里面 2、登录Greasy Fork - 安全、实用的用户脚本大全 搜索自己想要使用的东西&#xff0c;如GPT 找到 CHAT网页增强了 点击按安装&#xff0c;然后打开使用方法里面的 网址就可以使用

day04 两两交换链表中的节点、删除链表倒数第N个节点、链表相交、环形链表II

题目链接&#xff1a;leetcode24-两两交换链表中的节点, leetcode19-删除链表倒数第N个节点, leetcode160-链表相交, leetcode142-环形链表II 两两交换链表中的节点 基础题没有什么技巧 解题思路见代码注释 时间复杂度: O(n) 空间复杂度: O(1) Go func swapPairs(head *Li…