华清远见25072班C++学习day3
重点内容:
一、类
1.1 概念
1、C++中的类就是由C++中的结构体演变而来的,只是默认的访问权限和默认的继承方式,以及关键字不同,其他都相同。
2、一般构造数据类型中 既有变量又有函数的类型,都是由类来成。
1.2 C++中结构体和类的区别:
1、默认的访问权限:
C++中的结构体默认访问权限是:public公共的
C++中的类默认访问权限是:private私有的
2、默认的继承方式
C++中的结构体默认继承方式是:public公共的
C++中的类默认继承方式是:private私有的
3、关键字
C++结构体:struct
C++类:class
1.3 访问权限
1、public: 该权限是共有的权限,表示该权限下的属性(变量)、方法(函数),在类内、子类、类外都可以被访问。
2、protected: 该权限是受保护的权限,表示该权限下的属性(变量)、方法(函数),在类内、子类被被访问,类外不可以被访问。
3、private: 该权限是私有权限,表示该权限下的属性(变量)、方法(函数),只能在类内被访问,子类、类外不可以被访问。
1.4 封装
类的三大属性:封装、继承、多态
封装:写一个类的过程,将数据和对数据的处理 捆绑在一起的过程。
属性+方法 变量+函数
1.5 当成员函数的形参名和数据成员同名时
1、表明该数据成员属于哪个类的,即加上类名和作用域限定符
2、类里的每个非静态成员函数,都隐藏了一个this指针形参。
1.6 this指针
1、类里的每个非静态成员函数,都隐藏了一个this指针形参。
2、谁使用指针 指针就指向谁
3、this指针的原型:Student * const this; ==>指向不可变 指向里的值可变
1.7 类外定义成员函数
1、在类内声明函数
2、在类外定义成员函数,需要表明该函数属于哪个类的 即加上类名和作用域限定符。
二、C++中的动态内存分配和回收 (堆区)
1、C语言中的动态内存分配和回收使用的是malloc和free来完成的
2、C++依然可以使用上述的两个函数来完成动态分配和回收
3、C++也为程序员提供了两个关键字new和delete来完成动态的内存分配和回收。
2.1 内存分配
2.1.1 单个申请
格式: 数据类型 *指针名 = new 数据类型
2.1.2 连续申请
格式: 数据类型 *指针名 = new 数据类型[个数]
2.2 回收 (释放)
2.2.1 单个回收
格式: delete 指针名;
2.2.2 连续回收
格式: delete []指针名;
2.3 new、delete和malloc、free的区别
1、new、delete是关键字、而malloc、free是函数。
2、new申请空间是以为数据类型为单位,而malloc是以字节为单位。
3、new申请空间时可以初始化,而malloc不可以。
4、new申请什么类型的空间,指针就是什么类型。而malloc申请空间后需要强转才能使用。
5、new、delete区分单个连续的格式。而malloc、free函数不区分格式。
6、new 申请类对象空间时,会自动调用构造函数,而malloc不会。
7、delete释放类对象空间时,会自动调用析构函数,而free不会。
三、类中特殊的成员函数
1、特殊的成员函数的种类:构造函数、析构函数、拷贝构造函数、拷贝赋值函数、移动构造、移动赋值、取地址符重载、常取地址符重载。
2、特殊的原因:
1、这些函数无需程序员手动定义,系统会默认提供,如果程序员手动定义了,那么系统就会取消默认提供。
2、这些函数无需手动调用,在特定的情况下,自动调用,即使是程序员手动定义的这些函数。
3.1 构造函数
3.1.1 功能
用类实例化一个对象时,会自动调用构造函数,给类对象申请空间和初始化使用的。
3.1.2 格式
函数名:与类同名
返回值:无 也无void
参数:可以有参数,也可以无参数
访问权限:一般为public
3.1.3 调用时机
1、栈区 ==>何时实例化对象,何时自动调用构造函数
2、堆区 ==>何时使用new申请类对象空间,何时自动调用构造函数