👑个人主页:啊Q闻
🎇收录专栏:《C++》
🎉我自会去见我的山
💡感谢阅读,欢迎关注,点赞,收藏,评论💡
前言
进入类和对象,感受到了C++的魅力,学之前想的是,小小语法能有多难,学之后想的是,是我年少轻狂了🤡。
C语言是面向过程的,关注的是过程,分析的是如何一步一步解决问题,而C++不同,C++是
基于对象的,他是将一件事情拆分成不同的对象,依靠对象之间的交互完成,我们不需要太了解一步步的具体过程。
一.类
1.类的相关概念及用法
类其实和C语言中的结构体相似,C++中是将struct升级称为类,类兼容struct的用法,但是又比struct的用处更广,我们一起认识一下。
1.类之所以称为升级版的struct,是因为类中不仅可以定义变量,还可以定义函数。
2.class为定义类的关键字,className为类的名字,{ }中为类的主体,类的主体主要是由类的成员函数和成员变量组成。
3.类的两种定义方式:
(1)成员函数在类中定义 ,即声明和定义全部放在内中
(2)类声明放在.h文件中,成员函数的定义在.cpp中,即声明和定义分离,注意的是:成员函数名前要加类名
举个例子:
2.类的访问限定符及封装
1.访问限定符
1.public修饰的成员在类外可以直接被访问。
2.protected和private修饰的成员不可以在类外直接访问。
3.访问权限作用域从该访问限定符出现的位置到下一个访问限定符出现时为止。
4.如果后面没有访问限定符,该访问限定符的位置就到}即类结束。
5.class的默认访问权限是private,struct的默认访问权限是public。
举个例子:
2.封装
概念:将数据和操作数据的方法进行有机结合,隐藏对象的属性和实现细节,仅仅对外公开接口来和对象进行交互。
封装是类的一种特性,封装的本质上是一种管理,让用户更方便使用类,也就是一种对权限的限制,防止对代码程序随意修改。
在C++语言中,我们通过类将数据以及操作数据的方法进行有效结合,隐藏类的内部实现细节,控制接口对外使用。
3.类的作用域
类的作用域是类定义的一个新的作用域,相当于类圈定了一块空间属于它的地盘,我们在外部调用的时候,要记得声明类域进行访问。
二.对象
1.类的实例化
概念:我们用类类型创建对象的过程,就是类的实例化。
对于类的实例化的理解,我们可以将类比作成建筑设计图,而对象就是实际建筑,
一个建筑设计图可以对应多个建筑,同理一个类可以对应多个对象;
在建设楼房时需要开空间,同理类实例化成的对象,才要占用物理空间。
2.类的大小
类中有成员变量和成员函数,那我们在计算类的大小的时候,是如何计算的呢?
我们写个代码看看:
从运行结果及内存对齐规则可知,我们计算类的大小时,就是计算类的成员变量的大小,成员函数在公共代码段存放。
那当类中什么都没有时,即为空类,空类的大小是多少呢?
通过运行结果可知,空类的大小为1
空类大小为1,而不是0,是为了标识这个类虽然是空的,但是它被定义出来了。
三.this指针
看下面这个程序,我们如何知道 Init调用的是d1 的参数还是d2的参数呢?
我们发现,Init函数将d1和d2函数是按顺序设置的,那么这是如何做到的呢?
这就要谈到隐含的this指针了。
1.this指针的类型:this指针是*const,所以在成员函数,不可以给this指针赋值。
2.this指针只能在成员函数内部使用。
3.this指针的本质是成员函数的形参,所以对象中不存储this指针。
4.this指针是成员函数的第一个隐含的指针形参
其实隐含的this指针所做的事情,都是编译器的功劳。
类和对象上就分享到这里啦,如果对你有帮助的话,三连支持一下吧。
下篇博客还会继续分享类和对象的知识,希望能够一起进步,我们自会去见我的山。