【C++语言】初步认识面向对象编程类和对象(上)

news2024/9/22 8:03:19

在这里插入图片描述


文章目录

  • 前言
  • 一.初步认识面向过程和面向对象编程
    • 1.面向过程编程初步认识
    • 2.面向对象编程初步认识
  • 二.C++类
    • 1. 类的引入:
    • 2. 类的定义
    • 3.类的访问限定符&&封装
      • 3.1 访问限定符
      • 3.2 封装
    • 4.类的实例化
    • 5.如何计算类的大小
  • 总结
  • C++语言系列学习目录


前言

  1. 面向对象编程
  2. 类与对象

一.初步认识面向过程和面向对象编程

1.面向过程编程初步认识

C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。
在这里插入图片描述
在这里插入图片描述
面向过程编程(Procedural Programming) 是一种编程范式,它依赖于过程调用来实现程序的逻辑。它把程序视作一系列的程序执行步骤或者说是函数调用序列。这种方法强调的是在程序中执行一系列的计算步骤或者操作序列,而不像面向对象编程那样强调数据的抽象和封装。

与面向对象编程相比,面向过程编程通常更简单直接,适合于小型至中等规模的项目,或者特定类型的应用,如脚本编写和系统工具。然而,对于大型和复杂的应用程序,缺乏抽象和封装可能导致代码难以管理和扩展。

C++是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完成。

2.面向对象编程初步认识

面向对象编程(Object-Oriented Programming,OOP)是一种编程范式,它使用“对象”来设计应用程序和计算机程序。它侧重于数据抽象、封装、多态性和继承等概念。下面是面向对象编程的一些基本原则和概念:

  • 类(Class):类是对象的蓝图或者模板,它定义了一组具有相同属性(字段或变量)和行为(方法或函数)的对象的通用特性。

  • 对象(Object):对象是类的实例。每个对象都包含了类定义的数据和行为,具有独立的属性值(也可以称为状态),是程序操作的基本单位。

  • 属性(Attribute):属性是对象的状态,用变量表示。它们是存储在类或对象中的数据。

  • 方法(Method):方法表示对象可以执行的操作,是与对象相关联的函数。

  • 封装(Encapsulation):封装是把对象的实现细节隐藏起来,仅对外提供一个公共的接口。通过访问控制(private、protected、public),我们可以控制对象属性和方法的访问级别。

  • 继承(Inheritance):继承允许一个类继承另一个类的特性,即子类可以继承父类的属性和方法。这样可以实现代码复用,并建立类之间的层次关系。

  • 多态性(Polymorphism):多态性允许不同类的对象以统一的接口被处理。例如,通过覆盖(overriding)和重载(overloading)方法,不同的对象可以用相同的方法名实现不同的功能。

  • 抽象(Abstraction):抽象是简化复杂的现实问题的一种手段,它允许开发者聚焦于高级操作,而忽略底层的细节。抽象可以通过抽象类和接口来实现。

通过使用面向对象的方法,程序员能够以更直观的方式构建和理解复杂的系统,因为它们可以利用现实世界中的类比来设计系统的组件。大型软件项目通常易于管理,因为OOP提供的模块化使得编程更加组织化,代码也更易于维护和调试。面向对象编程广泛应用于许多不同类型的语言如Java、C++、Python、Ruby和C#等。

二.C++类

1. 类的引入:

在C语言中我们写结构体(struct),只能定义变量。在C++中,结构体不但可以定变量,还可以定义函数。这是因为我们把struct当成与类相近的关键字了。在C++中,我们更喜欢用class关键字来定义结构体等。

2. 类的定义

class为定义类的关键字,ClassName为类的名字,{}中为类的主体,注意类定义结束时后面分号不能省略

类体中内容称为类的成员:类中的变量称为类的属性或成员变量; 类中的函数称为类的方法或者成员函数

class className
{
// 类体:由成员函数和成员变量组成
}; // 一定要注意后面的分号

类有两种定义方式:

  1. 声明和定义全部放在类体中,需注意:成员函数如果在类中定义,编译器可能会将其当成内联函数处理。
    在这里插入图片描述

  2. 类声明放在.h文件中,成员函数定义放在.cpp文件中,注意:成员函数名前需要加类名::
    在这里插入图片描述
    一般情况下,更期望采用第二种方式。第一种方式更方便,第二种定义更符合工作所需。

3.类的访问限定符&&封装

3.1 访问限定符

C++实现封装的方式:用类将对象的属性与方法结合在一块,让对象更加完善,通过访问权限选择性的将其接口提供给外部的用户使用。
在这里插入图片描述
【访问限定符说明】

  1. public修饰的成员在类外可以直接被访问
  2. protected和private修饰的成员在类外不能直接被访问(此处protected和private是类似的)
  3. 访问权限作用域从该访问限定符出现的位置开始直到下一个访问限定符出现时为止
  4. 如果后面没有访问限定符,作用域就到 } 即类结束。
  5. class的默认访问权限为private,struct为public(因为struct要兼容C)
    注意:访问限定符只在编译时有用,当数据映射到内存后,没有任何访问限定符上的区别

【面试题】
问题:C++中struct和class的区别是什么?
解答: C++需要兼容C语言,所以C++中struct可以当成结构体使用。另外C++中struct还可以用来定义类。和class定义类是一样的,区别是struct定义的类默认访问权限是public,class定义的类默认访问权限是private。
注意:在继承和模板参数列表位置,struct和class也有区别,后序给大家介绍

3.2 封装

封装:将数据和操作数据的方法进行有机结合,隐藏对象的属性和实现细节,仅对外公开接口来和对象进行交互。

  • 封装本质上是一种管理,让用户更方便使用类。比如:对于电脑这样一个复杂的设备,提供给用户的就只有开关机键、通过键盘输入,显示器,USB插孔等,让用户和计算机进行交互,完成日常事务。但实际上电脑真正工作的却是CPU、显卡、内存等一些硬件元件。

  • 在C++语言中实现封装,可以通过类将数据以及操作数据的方法进行有机结合,通过访问权限来隐藏对象内部实现细节,控制哪些方法可以在类外部直接被使用。

总结:封装主要两个方面,数据隐藏(更安全)和提供接口(方便用户交互使用)。

4.类的实例化

用类类型创建对象的过程,称为类的实例化

  1. 类是对对象的描述,是一个模型一样的东西,限定了类的成员。比如我们要描述一个学生,他就有很多属性,名字,学号,性别等等属性,但没有给定具体数据,类只是个模板。
  2. 一个类可以实例化多个对象。类是一个模板,没有具体数据,可以实例化多个对象。
  3. 类并不会分配具体的内存空间来存储它。只是模板属性,并没有数据。

5.如何计算类的大小

其实这一点,我们在C语言便知道了,内存对齐。
实例:计算下方类的大小。

// 类中既有成员变量,又有成员函数
class A1 {
public:
	void f1(){}
private:
	int _a;
};
// 类中仅有成员函数
class A2 {
public:
	void f2() {}
};
// 类中什么都没有---空类
class A3 {};

运行结果:
在这里插入图片描述

结论:一个类的大小,实际就是该类中“成员变量”之和,当然要注意内存对齐,成员函数不占内存。注意空类的大小,空类比较特殊,编译器给了空类一个字节来唯一标识这个类的对象。


总结

此篇博客为简要介绍面向过程与面向对象的概念及区别,类的实例化对象、定义、封装、以及类的大小。


C++语言系列学习目录

提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加,添加超链接

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

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

相关文章

深度探索:Secure Hash Algorithm(SHA)全景解析

title: 深度探索:Secure Hash Algorithm(SHA)全景解析 date: 2024/4/15 18:33:17 updated: 2024/4/15 18:33:17 tags: SHA安全抗碰撞性算法版本实现细节性能优化发展历史应用案例 密码学中的哈希函数 一、哈希函数的定义 哈希函数是一种数…

车载终端设备主板方案_MTK平台智能后视镜行车记录仪PCBA定制开发

智能后视镜集成了车辆行车记录、倒车影像、AR实景导航、语音助手、ADAS辅助、云电子狗、蓝牙通话、影音娱乐等功能,为驾驶者提供全方位的驾驶辅助体验。 智能后视镜主板解决方案,采用了联发科MT6762八核处理器,拥有主频2.0GHz,采用…

Ubuntu与主机windows共享文件夹

一、创建共享文件夹: 虚拟机->设置->选项->共享文件夹->总是启用->选择本地的共享文件夹(如E:\Share)->确定。 二、设置挂载: 首先赋予/etc/fstab文件可编辑的权限; sudo chmod 777 /…

Langchain入门到实战-第二弹

Langchain入门到实战 Langchain快速入门官网地址Langchain概述Langchain调用大模型更新计划 Langchain快速入门 官网地址 声明: 由于操作系统, 版本更新等原因, 文章所列内容不一定100%复现, 还要以官方信息为准 https://python.langchain.com/Langchain概述 LangChain是一个…

从旺店通·旗舰奇门到金蝶云星空通过接口配置打通数据

从旺店通旗舰奇门到金蝶云星空通过接口配置打通数据 对接系统旺店通旗舰奇门 慧策(原旺店通)是一家技术驱动型智能零售服务商,基于云计算PaaS、SaaS模式,以一体化智能零售解决方案,帮助零售企业数字化智能化升级&#…

实时渲染 -- 流明(Lumen)

首先我们需要知道Lumen需要解决哪些问题。 很多人都会问,既然已经有了硬件的Raytracing ,我们为什么还要Lumen呢。这是由于很多硬件并不支持 Realtime Raytracing,对于支持的那些硬件, N 卡还算是勉强可以,而 A 卡支持…

科技感画册制作方法,视觉效果直接拉满

随着科技的不断进步,科技感画册制作也变得更加精彩和引人注目。通过巧妙地运用先进的设计工具和技术,以及结合创新的视觉元素,可以轻松地将画册的视觉效果直接拉满。 那你想知道怎么制作吗?现在我来教你这个方法吧,方法…

第二期书生浦语大模型训练营第三次笔记

RAG RAG是什么? RAG(Retrieval Augmented Generation)技术,通过检索与用户输入相关的信息片段,并结合外部知识库来生成更准确、更丰富的回答。解决 LLMs 在处理知识密集型任务时可能遇到的挑战, 如幻觉、知识过时和缺…

Unity开发holoLens2应用时的ProjectSettings配置

正确的进行Unity工程配置,才能进行后续的【发布】和【部署】操作… 本案例开发环境说明: Unity2021.3.18Win10VS2022HoloLens2 一、平台设置 二、Quality画面质量设置 三、Player玩家设置 四、XR-Plug设置 五、环境测试 导入一个官方demo&#xff0c…

安装jmeter和ant

安装jmeter和ant 安装java环境 安装jdk和jre 下载Java SE Development Kit 8 Java SE subscribers will receive JDK 8 updates until at least December 2030. 选择指定包进行安装,如windows 共享账号参考:Oracle官网 账号及密码 目前官网下载低…

论文速读:Do Generated Data Always Help Contrastive Learning?

在对比学习领域,最近很多研究利用高质量生成模型来提升对比学习 给定一个未标记的数据集,在其上训练一个生成模型来生成大量的合成样本,然后在真实数据和生成数据的组合上执行对比学习这种使用生成数据的最简单方式被称为“数据膨胀”这与数据…

Android,AMS、WMS、PKMS添加动态控制debug开关功能

问题背景 在framework源码中有很多debug开关,通常我们想要看某个模块的日志,比如说广播,就需要去修改源码,把对应的debug值改为true,但是这种方法耗时耗力,比如说我想看sendBroadcast的流程,但是BroadcastQueue中有很多debug开关,如下: 这种就需要去修改对应的源码才…

消费增值新模式:让每一分钱都更有价值

亲爱的消费者们,大家好!今天我想和大家探讨一种新颖的消费方式——消费增值,它让您的每一次消费都蕴含了额外的价值,让消费变得更加有意义。 在过往的消费观念里,我们往往只是简单地将钱花出去,购买所需的商…

文件传输工具WinSCP安装与使用教程

目录 一、WinSCP下载 二、WinSCP安装 三、WinSCP使用 WinSCP介绍: WinSCP 是一个 Windows 环境下使用的 SSH 的开源图形化 SFTP 客户端。同时支持 SCP 协议。它的主要功能是在本地与远程计算机间安全地复制文件,并且可以直接编辑文件。 一、WinSCP下…

图片壁纸社区app前后端开源小程序源码

图片壁纸社区APP前后端开源小程序源码,修改了开源版的前端样式,变成图片社区,也可以用来作为壁纸 源码下载地址抄笔记 (chaobiji.cn)

SpringBoot与Vue前后分离项目中返回结果为Long类型精度丢失问题处理

SpringBoot与Vue前后分离项目中返回结果为Long类型精度丢失问题处理 文章目录 SpringBoot与Vue前后分离项目中返回结果为Long类型精度丢失问题处理1. 前后分离环境1. 表结构2. 实体类 2. 问题描述3. 原因分析4. 处理方法(后端)1. 处理方式1(JsonSerialize注解)2. 处理方式2(Jso…

【InternLM 实战营第二期笔记01】书生·浦语大模型全链路开源体系+InternLM2技术报告

本次课程链接在GitHub上:InternLM/Tutorial at camp2 (github.com) 第一次课程录播链接:书生浦语大模型全链路开源体系_哔哩哔哩_bilibili InternLM2技术报告:arxiv.org/pdf/2403.17297.pdf 一、书生浦语大模型全链路开源体系笔记 Intern…

STM32H7的MPU学习和应用示例

STM32H7的MPU学习记录 什么是MPU?MPU的三种内存类型内存映射MPU保护区域以及优先级 MPU的寄存器XN位AP位TEX、C、B、S位SRD 位SIZE 位CTRL 寄存器的各个位 示例总结 什么是MPU? MPU(Memory Protection Unit,内存保护单元&#xf…

docker安装并跑通跑通QQ机器人实践(1)-前言及展示

随着大模型技术的迅猛发展,行业应用日益丰富且专业化。为了有效利用大模型的强大功能,建立与之紧密互动的应用接口至关重要。在此背景下,QQ、微信、钉钉等主流即时通讯工具凭借其广泛的用户覆盖和便捷的通信特性,成为连接用户与大…

动画渲染多少钱一秒?云渲染一分钟动画费用

动画渲染的费用因其复杂度和技术要求而异,云渲染服务则提供了一种高效的解决方案。一般而言,渲染一分钟动画的费用可能从几百到几千元不等,具体取决于使用的资源和渲染质量。下面来看看相关费用吧。 动画渲染多少钱一秒? 参考:…