|
C++课程纲要:
模块一 结构化程序设计 --C语言
模块二 面向对象的程序设计 -- OO
封装 -- 类
概念:
类 -- 具有相同属性和行为的一类事物进行抽象得到一个定义
只是一个概念
抽象的
永远存在
对象-- 类的一个个体
客观存在的
具体的
生命周期是有限的
封装:
成员变量 -- 属性
成员函数 -- 行为
构造函数 -- 在对象被构造出来后,进行初始化
名字与类名相同
没有返回值
一个类可以有多个构造函数
析构函数 -- 在对象被销毁之前,进行内存清理工作
名字与类名相同
没有返回值
一个类只有一个析构函数
访问控制属性:
public protected private
const -- 常量
成员初始化列表
static -- 静态
静态成员:
静态变量:
赋初值应在类外部,主函数开始之前
静态函数:
在静态函数内部不能使用非静态成员变量和函数
注意:
属于类本身的,不属于对象
在全局范围内只有一个副本
被所有该类的对象所共享
非静态成员:
属于对象
不同的对象拥有一个不同的副本
理解:
静态属于类,非静态属于对象
当类一旦被定义之后,静态成员已经就存在,并且
可以在没有任何一个对象的情况下直接通过类名去引用
非静态成员属于对象,只有在对象被构造之后,
通过对象去引用
非静态成员只能通过对象去引用
静态成员既可以通过类名也可以通过对象去引用
this:
系统隐含的指针
总是指向当前时刻调用函数的对象
注意事项:
静态函数内部有this指针吗?
没有
new delete :
new -- malloc
delete -- free
区别:
new delete 不是函数 是运算符
malloc free 是函数
注意:
有new 就必须有delete
否则,内存泄漏
嵌套类:
类中类
使用:
(1) 在类的内部直接使用
(2) 在类的外部使用(public)
内联函数: inline
非内联函数:
类定义:
.h 文件 -- 类声明部分
.cpp 文件-- 类定义部分
友元:
友元函数:
全局函数
另外一个类成员函数
友元类:
注意:
友元不可使用,破坏程序的模块化
继承:
1. 什么叫继承?
下一代无偿拥有上一代遗留下来的物质
2. 如何实现继承?
继承方式:
public
protected
private
3. 在实际的开发中如何使用继承?
目的:代码复用
4. 继承的注意事项:
(1) 继承之后构造和析构的顺序
构造:先基类后子类
析构:先子类后基类
(2) 覆盖问题(屏蔽问题)
(3) 多继承:一个类从两个或两个以上的类进行派生
问题:钻石环 -- 成员重复
解决:虚继承
多态:
重载:
函数重载:
1. 什么叫函数重载?
函数名称相同
参数不同(类型或个数)
同一个作用域内:
都是全局函数
或
都在同一个类中
返回值不能作为判断依据
能不能参数相同,但是只有返回值不相同?
2. 如何实现函数重载?
3. 构造函数重载
一个类需要有多种构造和初始化对象的方式
一个类需要多种构造函数:
(1)默认构造函数(缺省)
(2)带参构造函数
(3) 拷贝构造函数(复制构造函数):
1.student st2(st1);
2.student st3 = st2;
3.对象传参
4.返回对象
4.引用:
本质:是一个类型安全的指针
被包裹的一个地址
逻辑:是一个已有对象的别名
运算符重载:
1. 什么是运算符重载?
一种运算符当其遇见不同的操作数运算符法则不同
一个运算符多重含义
2. 如何实现运算符重载?
运算符分类:
一元 ++ --
二元 + - * /
重载方式:
成员函数重载
全局函数重载
3.运算符重载应用:
= 赋值运算符
拷贝构造函数
如果一个类包含了指针作为成员变量,那么必须提供如下函数:
默认构造函数
带参构造函数
拷贝构造函数
析构函数
重载=运算符
虚拟:
1. 什么是虚拟?
当使用一个指针去调用一个函数时,
不是根据指针本身的类型去决定调用哪个函数,
而是根据指针在运行时刻所指向的对象的类型去决定调用哪个函数
RTTI -- RunTime Type Identify 运行时刻类型鉴别
2. 如何实现虚拟性?
1. 定义基类,并声明一个虚函数
2. 派生出子类,并改写该虚函数
3. 基类的指针(引用)去指向子类的对象,
用指针调用该虚函数,虚拟性就产生了
3. 虚拟性在实际中的应用
用统一的接口去做不同的事情
4. 注意问题
1. 虚拟性与覆盖区别
2. 纯虚函数的问题
纯虚函数
抽象类 -- 包含纯虚函数的类
不能构造对象
3. 虚拟多层次调用的问题
模块三 泛型程序设计 -- GP(2)
泛型思想:
空泛的类型
不管对象的具体的类型是什么,可以用统一模式来存储和操作
模板:template
函数模板
类模板
STL: 标准模板库
容器:
顺序容器:
vector (数组)
list(链表)
deque(双向队列)
stack(栈)
关联容器:
set
map
multiset
multimap
迭代器 iterator
算法 algorithm
find
sort
高级概念:
流:
IO流:
ios
istream(cin) ostream(cout)
ifstream ofstream
文件流:
ifstream -- 输入文件流
ofstream -- 输出文件流 |
|