SHU OOP强调知识
- 变量定义的五要素
- 1.储存类型(决定生命期以及可见性,在某函数之内:auto:局部自动变量,可省略 static:静态局部变量;在所有函数之外:static:静态全局变量,如有缺省就是全局变量)
- 2.数据类型(决定变量的储存格式以及取值范围)
- 3.变量名
- 4.变量初始值
- 5.变量地址(系统确定) - 类
- 类的基础
- 对象的基本空间:类对象的基本空间是对象的非静态数据成员所占用的空间总和,一般占sizeof(类名或对象名)个字节,成员函数为该类的所有成员共享;资源空间不能被sizeof读取
- 类成员的访问控制:
- 三个保留字:public protected private
- 结构体与类的区别: class或struct关键字
- 数据成员和成员函数
- 数据成员一般设为private或protected
- 若成员函数是protected或private,仅限类的其它成员函数或友元函数调用。类的成员函数对同类的所有对象均有无限制的访问能力(除基类继承来的私有成员)
- 成员函数可以定义在类内或类外: 定义和声明成员函数的方式与普通函数差不多,成员函数的声明必须在类的内部,它的定义既可以在类的内部也可以在类的外部,作为接口组成部分的非成员函数的定义和声明都在类的外部,类体外定义成员函数时,必须使用如下格式:
名字空间名::类名::成员函数名
- 定义在类内的函数隐含inline建议
- 创建类对象:
- 类名不占空间。
- 对象的自我表现
- 对象调用其成员函数是发送消息给对象
- this常量指针
- this是一个常量指针(
类名 * const this
),不允许改变this中保存的地址 - this介绍
- 指针
- this是一个常量指针(
- 常量成员函数
- 常量成员函数介绍: const成员函数 常量成员函数
- 常量对象只能调用const成员(常量对象的this指针是常量指针常量)
- 类模板与模板类
- 附:类模板
- 编译系统不便宜函数模板只编译模板函数;编译系统也不编译类模板,只编译模板类
- 类的基础
- 构造函数及赋值运算
- 构造函数分类与介绍
- 构造函数完成处理对象空间、构造结构和初始化数据成员等工作
- 没有构造函数就不能构造对象,任何类至少要有两个构造函数,其中一个是拷贝构造函数,另一个可以不是默认构造函数,默认构造函数不是必须的
- 构造函数与默认构造函数: 构造函数的基础知识,后续:7.5,15.7,18.1.3
- 注意:调用默认构造函数时应该如下
1
2TIME t;//调用默认构造函数
TIME t();//不是默认构造函数,是一个函数原型
- 注意:调用默认构造函数时应该如下
- 转换构造函数:带一个实参的构造函数(调用时传入一个实参),它可以实现数据类型的隐式转换或强制转换,即可以将非该类成员的数据类型转换并且初始化新创建的类对象
- 利用转换构造函数初始化的格式
类名 对象名(实参,实参,...);
类名 对象名 = 转换构造函数的实参;
- 利用转换构造函数初始化的格式
- 构造函数的使用
- 创建对象数组
类名 对象数组名 [元素个数] = {}
其中大括号内可以是一个已经存在的对象(利用拷贝构造函数初始化数组元素),也可以显式地调用构造函数现场构造新的类放入数组(如Studnt(“0123”,“Chen”,‘m’,19)),也可以是转换构造函数的实参表(逗号隔开)
- 创建动态对象或动态对象数组
- 创建动态数组每一个元素的时候都要调用一次构造函数,且调用的是带实参的构造函数
1
2
3new 类名;
new 类名 (实参,实参);//调用构造函数
new 类名[元素个数](实参,实参...)
- 创建动态数组每一个元素的时候都要调用一次构造函数,且调用的是带实参的构造函数
- 创建对象数组
- 析构函数(见书)
- 拷贝构造函数
- 原型格式:
类名 (const 类名 &);
- 拷贝构造函数也可以在类外定义,同样需要指出类名
- 原型格式:
- 构造函数分类与介绍
- 补:对象的创建以及销毁
- 函数的返回值:值返回的函数返回的是一个临时对象,临时对象只能做右值,视为常量,因此如果需要对值返回函数进行复合运算(例如
cout<<a+b;
)此时应该将接收该变量的参数设置为常量引用型;如果是非const引用,则只能绑定在运行期间具有生命的变量,(函数返回的值不具有生命,在返回后被使用后就被销毁,如果没有被使用,则直接销毁)
- 函数的返回值:值返回的函数返回的是一个临时对象,临时对象只能做右值,视为常量,因此如果需要对值返回函数进行复合运算(例如
SHU OOP强调知识
https://mapllle.site/2022/09/01/Language/CPP/CPPschool/