C++入门之类的引入及介绍
类的引入
C语言是面向过程的,而C++是面向对象的。在C语言里面,是通过分析出求解问题的步骤、调用函数解决问题的;但是,在C++中是将一件事拆分成不同的对象,依靠对象之间进行交互完成的。
在C语言中,可以通过struct来定义一个部分,但是在C++中,我们不仅兼容C语言中的struct,还引入了一种新的定义方式——类。
类是由两部分组成的:
- 成员变量
- 成员函数
类的定义
- class是定义类的关键字,后面跟的就是类的名字,{}里面的是类的主体部分;
- 类中的元素称为类的成员,类中的数据称为类的属性或者成员变量;函数称为成员函数;
两种定义方式:
- 成员函数的声明和定义全部放在类体中;
- 声明在头文件中,定义在cpp文件中。
注意:定义类{}后面一定要有“;”
**类的访问限定符及封装
封装
-
封装是C++中面向对象的三大特性之一,其他两个特性为:继承、多态。
-
封装就是将数据和操作数据的方法进行有机结合,隐藏对象的属性和实现细节,仅对外公开接口来和对象进行交互。其本质类似于管理。
类的访问限定符:
在C++中,实现封装的方式为:使用定义的类是通过访问权限选择性的将其接口提供给外部用户使用。
访问限定符分为三大类:
- public(公有);
- protected(保护);
- private(私有)。
注:
- public修饰的成员在类外可以直接被访问;protected和private修饰的成员在类外就不能直接被访问。
- 访问权限的作用域是从该访问限定符出现的位置开始,直到下一个访问限定符的出现时为止。
- class定义的类的默认访问权限为private;struct定义的类默认访问权限为public。
类的作用域
类定义了一个新的作用域,类的所有的成员都在该作用域中;
若要在类外定义成员,就需要使用作用域解析符“::”来指明。
class Studnt() //定义类里面没有成员
{
}:
void Studet::Print(); //这个函数是在类外定义的,加了作用域解析符
{}
类的实例化
- 类其实就像是一个模型一样的东西,限定了类的成员,但并没有分配实际的内存空间来存储它。
- 一个类可以实例化出多个对象来,实例化出的对象占物理实际物理空间,存储类车成员变量。
类的对象模型
每个对象中都会包含类的各个成员,但由于每个对象的成员变量的不同,所以每个对象都会调用同一份函数,这样势必会造成很大程度上的空间浪费;
C++中的解决方法是:只保存成员变量,成员函数存储到公共代码段上。
那C++中又是如何来计算类的大小呢?
由于类的存储方式,一个类的大小实际上就是该类中成员变量的大小;但是计算成员变量之和并不是将各个类型的变量所占空间大小加起来就行,在计算时,还得遵循内存对齐规则。