当前位置: 首页 > news >正文

北京哪有建网站公司或个人的手机百度搜索引擎入口

北京哪有建网站公司或个人的,手机百度搜索引擎入口,怀柔石家庄网站建设,企业建站搭建【C笔记】C之类与对象(上) 1、类是结构体的升级2、类中可以定义的东西3、类访问限定符4、类的声明5、类的实例化(定义)6、类的大小的计算7、this指针 1、类是结构体的升级 C的一个显著特征就是兼容C语言,所以C把结构体“升级”成了“类”&am…

【C++笔记】C++之类与对象(上)

  • 1、类是结构体的升级
  • 2、类中可以定义的东西
  • 3、类访问限定符
  • 4、类的声明
  • 5、类的实例化(定义)
  • 6、类的大小的计算
  • 7、this指针

1、类是结构体的升级

C++的一个显著特征就是兼容C语言,所以C++把结构体“升级”成了“类”,之所以是“升级”是因为,在C++中的结构体及支持以前C语言的结构体的玩法,也可以支持C++中类的玩法。
例如单链表节点这个类,我们既可以写成纯C版本:
在这里插入图片描述
用纯C的写法,我们每次要定义一个节点变量的时候,都必须要加上一个前缀struct,非常的麻烦。
而且就算是我们用了typedef,在结构体内部也还是不能直接用typedef后的符号,因为在结构体内部typedef还没有起作用:
在这里插入图片描述

非常麻烦!
但在C++中,我们就不必要担心这些情况,因为在C++中,结构体也被当成了类,而类是直接可以类名来定义变量的:
在这里插入图片描述
不管类内部还是外部,我们都可以直接使用类名来定义变量。

2、类中可以定义的东西

既然类是结构体的“升级”,那么内在结构体中定义的东西也一定能在类中定义,所以类中能定义的包括:
各种变量:
在这里插入图片描述
数组:
在这里插入图片描述
还有枚举和结构体等等:
在这里插入图片描述
几乎可以定义所有的东西:

但C++的类除了可以定义以上这些东西之外,还一个定义一个类独有的东西:“成员函数”,
有了成员函数,我们在管理结构体中的各个成员的时候就可以更方便,而不需要每写一个函数就需要传参。
例如栈这个类的初始化:
在这里插入图片描述
这是因为类划分了一个“类域”,在成员函数被调用的时候,就回到类中去寻找各个变量,这就不需要我们老是传递参数了。
而且使用起来也很简单,就像以前结构体访问成员变量一样:
在这里插入图片描述
而这个“public”是一个类访问限定符。

3、类访问限定符

在一个类中,我们总有些东西是不想被外面访问到的,也总有一些东西是想要对外开放的,这时候就需要访问限定符来管理了。
访问限定符一共有三个:

public(公有)
protected(保护)
private(私有)

第一个public表示公开,由这个访问限定符修饰的成员不管是在类内部还是外部,都可以自由访问:
在这里插入图片描述
而第二个protected,我们现在暂且认为它和public是一样的,因为这个访问限定符实在以后的类的继承中才能显现出区别的。
第三个private表示私有,被这个访问限定符所修饰的成员就只能在类里边访问,而在类外边是访问不到的:
在这里插入图片描述

而要是我们不显示的添加访问限定符,在类和结构体中也是有默认的访问限定符的。
其中,类的默认访问限定符是private:
在这里插入图片描述
而结构体的默认访问限定符是public:
在这里插入图片描述

4、类的声明

大家是否有过一个疑问?就是我们平时写的这样一个类:
在这里插入图片描述
它到底是声明还是定义呢?
首先我们要明确声明和定义的区别,声明只是告诉编译器,有这么一个函数或变量存在,而定义则是为这个函数或变量开辟空间。
所以我们就可以想接下来这样来验证上面所写的到底是声明还是定义:
在这里插入图片描述
我们发现用域作用限定符是访问不到成员的,这就说明编译器并没有为这个类开辟空间。所以编译器找不到这个成员的地址。

5、类的实例化(定义)

有声明就得有定义,其实我们平时创建的一个类对象就是一个类的定义,也称为类的实例化:
在这里插入图片描述

这样,编译器才会真正开辟空间。

6、类的大小的计算

其实类的大小计算遵循着结构体内存对齐的规则,例如下面这两个类和结构体:
在这里插入图片描述
从结果就可以看出类大小的计算也是遵循着结构体内存对齐的那套规则的。
同时不管我们是使用类名来计算的小还是使用类对象来计算大小,都是可以准确算出一个类的大小的:
在这里插入图片描述

这是因为就算我们没有实例化类对象,但通过类名我们还是可以找到类的声明,类的生命虽然没有开辟空间,但也相当有了一张“图纸”,我们可以通过这张“图纸”来计算出类的大小。

但是有一点是不一样的,就是当类中存在成员函数的时候:
在这里插入图片描述

我们发现,就算类中添加了成员函数,类的大小还是没有发生改变,这是为什么呢?
其实这是一种节约资源的做法,我们不妨先想一想,我们平时定义的各个类对象,他们的成员变量是否是相同的变量?
在这里插入图片描述
答案显然不是的。
但它们所调用的函数是不是同一个呢?
答案是是的,因为函数的逻辑都是一样的,而各个对象的成员变量的值是可能各不相同的,不相同的只当然不能共用同一个变量了,但是相同的逻辑就只需要一段相同的指令就行了。
所以,类中就没有必要存储成员函数了。类中的成员函数其实是放在代码段中的。

但要是,我有一个“空类”,也就是类中没有成员变量也没有成员函数,那这个类的大小又该是多少呢?
我们可以来验证一下:
在这里插入图片描述
我们可以看到,空类的大小是1字节。
其实这一字节的作用只是用来占位而已,只是表示这个类存在过。

7、this指针

经过前面的叙述,我们已经知道成员函数并不存储在类中。那么问题来了,既然不存储在类中,那么在调用的时候就必定需要传参啊,那为什么在写成员函数的时候不需要传递成员变量呢?

其实,所谓的“不用传参”只是表面现象而已,其实只是把传递对象的工作交给了编译器来做而已。
事实上,我们平时写的成员函数还有一个隐藏的参数:“this”指针,这个指针是一个类对象的指针,也就是调用函数的对象的指针:
例如下面这个函数,编译器会在底层将它处理成这样的一个函数:
在这里插入图片描述
但这是规定给编译器做的工作,也就是说我们不能和编译器“抢工作”,不能显示的将this指针,写在参数列表中。

但我们却可以在类当中使用它,例如上面的这个函数也可以这样写:
在这里插入图片描述
但是像这种单纯访问成员变量的情况,我们一般都不会显示的将this写出来,因为编译器自己会自动补上,何必自己给自己找麻烦呢?

http://www.yayakq.cn/news/865833/

相关文章:

  • 杭州网站建设开发有限公司美橙建站五合一建站套餐申请
  • 用html5做商城网站怎么做计算机专业设计一个网站
  • 手机网站页面尺寸大小小程序模板下载了怎么用
  • 沈阳网站建设求职简历江西建设厅网站官网
  • 免费素材网站哪个最好永泰建设工程网站
  • 域名抢注网站是怎么免费室内装修3d设计软件
  • 游戏公司网站模板下载wordpress linux版本
  • 可以做线路板网站的背景图app界面怎么做
  • 做跨境网站注意事项东圃做网站
  • 给新公司建网站一元购网站建设方案书
  • 3733手游网站在哪里做的想建一个网站怎么做
  • 开福区网站建设论坛注册域名有什么意义
  • 网站建设中 windows亚马逊中国网站建设目标
  • 有建设网站的软件吗公司注册资金一览表
  • 网站建设采取招标的形式网站地图创建
  • 做填写信息的超链接用什么网站是否有可能一个人完成网站开发
  • 石家庄网站优化排名推广app调用网站
  • 营销型网站开发流程包括logo设计的最好的公司
  • 微商城建设购物网站上海3d网站建设
  • 网站做指向是什么意思wordpress 删除小工具
  • 优化网站排名推荐公司能买源码的网站有哪些
  • 电子商务网站建设及推广方案论文延安市城乡建设局网站
  • 备案的网站可以攻击吗珠海免费网站建设
  • 绵阳网站建设scmmwl社区网站模板
  • 北海网站建设网络公司WordPress页面加分类文章
  • 南沙建设局网站app开发制作在哪儿
  • 网站 分析深圳seo公司
  • 建网站程序下载鞍山市城乡建设局网站
  • 网站服务器用什么配置网络课程
  • 分类信息网站如何建设深圳龙岗企业网站建设