本科课程复习之 面向对象程序设计及C++
本科课程复习系列之二——面向对象程序设计及C++
排版什么的过几天再重排 总结的也不全 过段时间重新搞一下
第三章知识点总结
·综述
一、类与对象定义
1.类的定义:
静态属性:数据成员
动态属性:成员函数
定义格式:(借用老师的PPT)
注意:
- Private和protected可以省略,public不可以省略
- 最后的分号不可省略
- 不能对数据成员直接初始化
成员函数的实现:
- 类内定义(内联函数)
- 类外定义(普通函数)
访问属性:
2.定义对象
·定义格式:
1.类名 对象名1,对象名2,,,,对象名n
2.class 类名
{,,,,,,,,
}对象名1,对象名2,,,,对象名n
·访问形式:
- 圆点访问(public修饰的成员才可以被对象直接访问)
- 指针访问
3.this指针
·用来存放当前指针的地址
·局部对象在栈里
二、构造函数与析构函数
(系统自动调用)
1.构造函数
·定义类的对象时:(1)分配空间(2)构造函数对其初始化
·构造函数名与类名一致
·构造函数无返回值,前面不能加void
·属性为public
·声明:类名(形参);
定义:类外定义 :类名::类名(形参)
{ 函数体 }
类内定义:类名(形参)
{ 函数体 }
·一个类可以有多个构造函数,但必有使其重载的条件
·如果用户没有提供构造函数,系统会自动提供但不能对其初始化,只能分配空间
2.拷贝构造函数
·以下三种情况下系统自动调用拷贝构造函数
(1) 由一个对象初始化另一个对象
(2) 对象作为函数的实际参数传递给函数的值形式参数(?????)
(3) 对象作为函数返回值
3.析构函数
·构造函数名与类名一致但前面要加~
·析构函数无返回值,前面不能加void
·析构函数没有形参,不能被重载
·如果用户没有提供析构函数,系统会自动提供一个
三、深拷贝与浅拷贝
1.浅拷贝: 如果一个类的对象拥有资源(堆,或者是其它系统资源),当这个类的对象发生复制时,并未复制其内的动态资源的情况视为浅拷贝
·系统默认的拷贝构造函数采用的就是浅拷贝形式,复制对象时不会拷贝对象成员申请的动态内存资源,因此在析构对象时容易出现意外错误
2. 深拷贝:如果一个类的对象拥有资源(堆,或者是其它系统资源),当这个类的对象发生复制时,其包含的动态存储资源也随之被复制的情况视为深拷贝。
·深拷贝时必须要为该类显式定义一个拷贝构造函数,并在该函数内部实现动态空间分配和数据拷贝工作
四、对象的使用
1.对象数组
定义:类名 数组名[元素个数];
使用:数组名[下标].成员名;
2.对象指针
定义:类名 *对象指针名
引用:单个对象:
指针变量名——>成员名 / (*指针变量名).成员名
数组:
(对象数组名+下标)->成员名 / *(对象数组名+下标).成员名
3.对象引用
·是一个已经定义的对象的别名,与对应对象共享一个单元。
·定义时必须初始化
4. 对象参数
五、友元
友元使得外部函数或外部类可以直接访问本类内的私有数据成员
- 1. 友元函数
在函数声明前加关键字friend即可
注意:
(1) 声明的位置任意,不受访问属性的限制。
(2) 打破了信息封装和隐藏机制,需要在安全性和效率之间折中考虑。
- 2. 友元成员函数
友元成员所在的类要先定义
一个类的内联函数不能成为其他任何类的友元。
- 3. 友元类
如果一个类是另一个类的友元,则该类中的成员函数都是另一个类的友元成员,都可以访问一个类的所有成员
注意:
- 友元关系是单向的,不具有交换性
- 友元关系也不具备传递性
第六章知识总结
一、静态多态(编译阶段)
1.函数重载:
同名不同参,参数顺序、个数、种类至少一个不同
2.运算符重载(通过友元函数,成员函数)
·对已有运算符赋予多重含义,实质是函数重载
·函数名是:
operator运算符
- 1. 只能重载已有运算符,不能创造新的运算符
- 2. . .* :: ?: sizeof 不能被重载
- << >>只能通过友元函数重载
※成员函数
重载单目运算符:无参(调用的对象就是第一操作数)
双目运算符:一个参数(第二操作数)
※友元函数
重载单目运算符:一个参数(第一操作数)
双目运算符:两个参数(第一操作数,第二操作数)
二、动态多态(运行阶段)
1.虚函数
·在类体内声明
Virtual <返回类型> <成员函数名> (形式参数表);
·声明时加virtual,定义时不加virtual(类似的还有friend static)
·作用:通过基类指针或引用访问基类或派生类中被声明为虚函数的同名函数
·条件:
- Public公有继承
- 基类中和派生类中函数同名
·只有类的非静态成员才能是虚函数
·以下3个不能声明为虚函数:
静态成员函数 内联成员函数 构造函数
·析构函数可以是虚函数
三、纯虚函数与抽象类
1.纯虚函数: 只有函数声明而没有具体实现
·声明: virtual <返回类型> <成员函数名>(<形式参数表>)=0;
·纯虚函数不能被调用
·纯虚函数的作用在于基类给派生类提供一个标准的函数原型与统一的接口,为实现动态多态性打下基础,派生类将根据需要给出纯虚函数的具体实现代码。
2. 抽象类: 指该类中至少包含了一个纯虚函数
·抽象类不能生成对象,因为该类中的纯虚函数中无实现代码。
·抽象类可以定义其指针及引用。