打开类与对象的大门——C++


之前的学习仅仅是铺垫,本章内容是C++语言的正式开始,类与对象也是C++学习的初期重点。

1. 类

1.1 引入

说到类,我们不得不谈到C语言中的结构体,但C语言中的结构体仅仅能在内部定义变量,而不能定义函数;在C++中,结构体内部既能定义变量又能定义函数,我们以创建一个栈来说明:
在这里插入图片描述
那如何访问内部成员(变量+函数)呢?
与C语言对结构体的访问类似。
在这里插入图片描述

1.2 什么是类

1.2.3 class 关键字

那类是什么呢?类其实就是有成员变量与成员函数构成的集合体。

== class关键字==
class name
{
//内部就是成员变量与成员函数
}

以后类的书写有两种方式:在这里插入图片描述
同时,以后不用加 struct 限定即可创建变量;在这里插入图片描述

当然以上两种创建方式可以混用,因为C++支持C语言,至于两者有何区别,我们后续会继续深入讨论(一般C++习惯使用class)。
除此之外,C++类的成员变量一般习惯要加标识符,因为类成员函数涉及传参的问题:在这里插入图片描述
在这里插入图片描述

2. 类的访问限定符

C++中有三种访问限定符
在这里插入图片描述
这三种访问限定符都有他们各自的意义:
public:修饰的成员在类外可以直接访问在这里插入图片描述

protected 与 private :修饰的成员在类以外不能直接被访问(此处 private 与 protecte 是类似的)
在这里插入图片描述
在这里插入图片描述
访问权限的作用域:a.修饰到下一个访问限定符为止 b.修饰到类的末尾
在这里插入图片描述
在这里插入图片描述

class 的默认访问权限是 private;
struct 的默认访问权限是 public

3. 类的定义与类的作用域

类有两大定义方式:
(1)声明与定义全部都放在类体中,其中这种定义方式成员函数有可能被编译器识别为内联函数处理,
在这里插入图片描述
(2)声明与定义分离
类的声明放在头文件中;成员函数的定义放在.cpp文件中
和命名空间域类似;,其中一个类就构成一个作用域;因此在定义成员函数时,我们必须加上访问限定符::,这样才能找到相应的成员变量。在这里插入图片描述
cpp文件
在这里插入图片描述

补充:封装

面向对象的三大特性:封装、继承、多态。
在类与对象阶段主要体现了封装的特性,因此我们先重点学习封装。
那什么是封装呢?

封装:将数据(成员变量)与操作数据的方法(成员函数)进行有机结合,隐藏对象的属性和实现细节,仅对外公开借口来和对象交互。

通俗来说,我们平时使用手机时,能看到手机屏幕触屏打游戏,能通过手机通电话;但手机内部结构以及如何实现打游戏与通电话的功能作为用户我们并不理解但就能流畅的使用手机,生产方正是对手机进行了封装实现了与客户的交互。
封装的本质就是一种管控
比如:cpp数据和方法都放在类内部;cpp访问限定符对成员进行了限制…
C++语言中实现了封装,可以通过类将数据与操作方法进行有机结合,通过访问权限来隐藏对象及对象内部细节,控制哪些方法可以在类外直接被使用。

4. 对象——类的实例化

用类创建对象的过程,叫做类的实例化

定义类仅仅是一个描述(声明),我们并没有给这个类开辟空间存储。
一个类能实例化出多个对象。这些对象都有占用实际的内存空间以存储成员变量
例如,我们不能直接访问类内部的变量,要先实例化出对象才能对对象的成员变量进行访问。在这里插入图片描述

5. 类对象的存储

5.1 类对象的存储方式

我们已经十分清楚,一个类由成员函数与成员变量构成,那类的大小是不是要包含变量与函数的总大小呢?我们不妨做个试验:在这里插入图片描述
通过上面的试验我们可发现:一个对象的大小取决于成员变量,与成员函数无关;换而言之,成员函数并没储存在类对象内部而是储存在公共代码区在这里插入图片描述
那如果是一个空类,它的大小又是多少:?在这里插入图片描述
空类是一个特殊的类,编译器给了空类一个字节来识别这个类对象

5.2 类对象的大小计算

类对象的大小与结构体的大小计算方式相同,遵循结构体的对齐规则
下面我们再来回顾回顾结构体的对齐规则:

  1. 第一个成员在与结构体偏移量为0的地址处;
  2. 其他成员变量要对齐到对齐数的整数倍处(对齐数=系统默认对齐数与该数据类型大小两个中的最小值)
  3. 结构体的总大小为:最大对齐数(所有变量类型最大者与默认对齐参数两者中的较小者)的整数倍
  • 18
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值