IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 三部曲深剖C++类与对象——上篇 -> 正文阅读

[C++知识库]三部曲深剖C++类与对象——上篇

传统艺能😎

小编是双非本科大一菜鸟不赘述,欢迎大佬指点江山(QQ:1319365055)
此前博客点我!点我!请搜索博主 【知晓天空之蓝】

🎉🎉非科班转码社区诚邀您入驻🎉🎉
小伙伴们,打码路上一路向北,背后烟火,彼岸之前皆是疾苦
一个人的单打独斗不如一群人的砥砺前行
这是我和梦想合伙人组建的社区,诚邀各位有志之士的加入!!
社区用户好文均加精(“标兵”文章字数2000+加精,“达人”文章字数1500+加精)
直达: 社区链接点我

🎉🎉🎉倾力打造转码社区微信公众号🎉🎉🎉
在这里插入图片描述


在这里插入图片描述

面向过程和面向对象🤔

类和对象是 C++ 的核心特性

我们之前的C语言就属于面向过程,关注过程,分析求解问题的步骤再通过函数调用解决问题;而现在C++是基于面向对象,关注对象,将一个问题拆分成不同对象,依靠对象之间的交互完成。

比如有一个图书馆系统,用C语言面向过程思路就是:统计图书,图书分类,同步上架图书数据,记录借阅信息。而面向对象我们会创建两个类,图书馆和用户,我们关心的是图书馆和用户之间的关系,再分别实现交互,这里简单提一下你可能不是很好理解,但是没有关系,我们后序会慢慢学习的。
在这里插入图片描述

类的引入🤔

类用于指定对象的形式,它包含了数据表示法和用于处理数据的方法,类中的数据和方法称为类的成员。定义一个类,本质上是定义一个数据类型的蓝图

最开始的老大哥在引入类的概念时是利用结构体引入的,C++ 兼容 C 的用法但同时也对C的结构体进行了升级,升级成了类,其重要标志就是结构体名称可以做类型其次结构体里面可以定义函数,相比升级后的 struct 我们更喜欢使用 class ,class 下它定义了类的对象包括了什么,以及可以在这个对象上执行哪些操作,struct 和 class 都可以用来定义类。

访问限定符🤔

C++引出一个概念叫封装,那他就提出一个东西叫访问限定符,访问限定符是指类里面的东西我不一定都想拿给你用,能给你用的我会用 public 关键字声明,数据就可以直接被访问,当没有 public 声明时,class 默认数据为私有(protected 和 private)类型,而 struct 不加限定符默认为公有(public)的因为他要兼容 C。

privata 私有域限制的是从域外面进行访问,锁只对外人,里面的类是可以访问到 private 的。

现阶段我们认为 protected 和 private 是一样的,他们的不同会在学习继承时体现出来。

class Student
{
public:
  …………
}

我们也可以加多个访问限定符,因为 C++ 会默认你的类型从第一个访问限定符开始到下一个结束,这个之间的区域就是对应的访问类型。如果后面没有访问限定符作用域就会在遇到 } 后结束,注意访问限定符只在编译的时候有用,在数据映射到内存后,就没有任何访问限定符上的区别了

封装🤔

封装,继承,多态并称面向对象的三大特性。

要讲封装就要和 C语言 做对比,比如我们C语言定义了一个栈 stack,我要对这个栈进行入栈出栈的操作,我就要在外面自己搞一个 StackPush 和 StackPop 函数,很直观的看出我们数据和方法是分离开来的,而分离开来的最大问题就是松散自由,我没有办法对他进行集中的管理。

为什么这么说,因为我一旦想进行打印这种类似的操作,除了直接调用寻找栈顶元素的函数,就是直接使用成员访问操作符写成(stack.a[stack.top-1]),别人在使用时就可能会误用,不知道是栈顶元素还是栈顶元素下一个。

封装的意义就是更好的管理,还是那句话,young man,太自由你把握不住。说难听点,C语言这种松散自由的局面只适合高素质程序员,我们不能要求每个人都有高素质去切合代码,而C++的约束才是更贴近大多数人的方式
在这里插入图片描述
而 C++ 首先会把数据和方法封装到一起,便于我们更好的控制,想自由访问的设计成公有,不想直接拿出来访问的设计成私有,像这样:

class Stack
{
 public:
    void Push() 
    {}
    void Pop()
    {}
private:
    int* data;
    int size;
    int capacity;
}

所以一般情况下我们设计类,成员数据或者没必要调用的函数都是私有或者保护,想给访问的蔡设计成公有,所以 C++ 封装就是将数据和操作数据的方法进行有机结合,隐藏对象的属性和实现细节,仅对外公开接口和对象进行交互,相比C语言更加严谨。

类的作用域🤔

类里面用来定义的空间就是类的作用域,他和命名空间类似,都有域。

注意成员函数如果在类里面定义,编译器可能会默认把他当成 inline 内联函数处理,这就暗示了实际中短小函数可以直接在类里面定义,长一点的函数定义和声明要分开。我们类里面什么都没有的就是空类,大小为 0;而当类对象没有成员变量时不能说是空类,编译会给他们分配 1 byte 表示对象存在过

类的实例化🤔

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

类不能存数据,类定义出的对象才能用来存数据,所以我说类就像一张图纸,有了房子才能住人。那么问题来了,房子修好了我怎么算大小呢,成员变量和函数参差不齐的,这里就要知道他是怎么考虑的,其实他计算大小时值算了成员变量,不考虑成员函数!

其实很简单,因为外面调的每个同名函数是同一个函数,我没必要再去每个对象里面去存个他的指针,那就纯纯的浪费了,函数名实际上是存放在了内存的公共代码区。但是成员变量就要各存一份了,因为不同对象里面他们的值不一定是相同的,他们相对独立。

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-05-18 17:26:01  更:2022-05-18 17:28:37 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 19:08:02-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码