| |
|
开发:
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++】类和对象(第一站)初识类+this指针 -> 正文阅读 |
|
[C++知识库]【C++】类和对象(第一站)初识类+this指针 |
不知你在学习C语言和C++的适合,曾否听过老师这么讲述这两个语言之间的区别:
我一直不太理解这二者之间的区别,在查阅了一些博客后,发现了一个比较好的解释👉【传送门】
本篇博客,就让我们从类和对象开始,渐渐了解什么是“面向对象编程” 文章目录1.类的引入1.1结构体在C语言中,我们可以定义自定义类型:结构体。在C++中对结构体的语法进行了扩充,结构体内部不仅能定义变量,还能定义函数
1.2class为了和C语言里面的结构体作为区分,我们不再用
class为定义类的关键字, 类中的元素称为类的成员:
2.类成员的定义类定义了一个新的作用域,类的所有成员都在类的作用域中。在类体外定义成员,需要使用 2.1函数声明和定义分离和普通的函数一样,类同样支持声明和定义分离。下面的代码中,我并没有分离函数的声明和定义
如果需要在
在另外的源文件中定义函数
当我们编写大型项目的时候,一般都会采用声明和定义分离的方式来编写源码,这样可以更方便他人快速查阅我们的头文件,理解代码的“大纲” 这样看起来好像和以前的方式没啥区别。但当我们引入访问权限的概念后,一切都变啦! 2.2访问限定符class的默认访问权限是私有;struct默认为公有
我们可以用
在前期学习的时候,我们可以认为
这样可以做到,当函数定义修改之后,只要不修改函数声明,就不需要修改main函数中函数的调用! 2.3封装为什么会有权限的出现呢?我们可以细想一下下面这个场景:
这便是我们常常提到的封装:将数据和操作数据的方法进行有机结合,隐藏对象的属性和实现细节,仅对外公开接口来和对象进行交互。 3.类的实例化用类类型创建对象的过程,称为类的实例化
类就好比一个毛坯房,现在毛坯房建好了,要想它变得精致,我们还需要在main中调用这个类,不然毛坯房就要变成烂尾楼了
4.计算类的大小一般有4种类:包含函数和变量的、只包含函数的、只包含成员变量的、空类 让我们来康康如何计算这些类的大小,解析见注释哦! 其实只需要记住,空类和只有函数的类会有1个字节的空间。计算类的空间的时候不会计算函数大小,成员变量的大小计算遵循结构体内存对齐的计算方法就行了!
5.this指针5.1特点当你用同样的图纸建了很多个屋子后,有没有想过应该如何区分它们呢? C++在设计这部分的时候,添加了一个this指针来解决这个问题:
5.2显式使用this就用下面这个函数举例
实际上,在调用它的时候,编译器会做如下处理
因为只有这样,才能完整的区分两个不同的类 进一步看看下面这个代码,可以帮助你理解this指针
这是一个日期的比较函数,是操作符重载(后面会讲到) 你可以看到,这个函数我们传入了一个Date类型的引用,这是区别于this的另外一个类的对象 如果没有this,那就很难区分两个变量的
5.3空指针问题
6.类中成员函数名的处理除了this指针之外,编译器在链接函数名的时候,也做了相应的处理。在Linux里面查看下面这串代码的汇编代码
可以找到这两个类的成员函数的地址和函数名
可以发现,这两个函数的地址不同,但函数名中并没有包含它的公有、私有信息。这也能证明 下面是一个普通函数(不在类里面)的函数名 观察类里面的函数名,可以看到比起普通函数,它还包含了类名,来标明自己是被封装在某个类里面的。同时前缀也从
当我把相同传参的函数放在类外面,重新查看汇编代码
可以看到它发生了一些变化,比如前缀变为了 虽然我现在还不知道前缀 结语本篇博客是类和对象的第一篇笔记,不知能否帮到你呢 |
|
C++知识库 最新文章 |
【C++】友元、嵌套类、异常、RTTI、类型转换 |
通讯录的思路与实现(C语言) |
C++PrimerPlus 第七章 函数-C++的编程模块( |
Problem C: 算法9-9~9-12:平衡二叉树的基本 |
MSVC C++ UTF-8编程 |
C++进阶 多态原理 |
简单string类c++实现 |
我的年度总结 |
【C语言】以深厚地基筑伟岸高楼-基础篇(六 |
c语言常见错误合集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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:34:15- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |