第 9 章 复杂对象 —— C++ 语言 ppt 节选
来源:田浩然上传资料 / 0A005-计算机科学技术基础B/C++语言ppt/
9.1 对象指针和对象引用
9.1.1 指向类的成员的指针
-
指向数据成员的指针
- 定义格式:
<类型说明符> <类名> *<指针名> - 例:
int A::*pc = &A::c;
- 定义格式:
-
指向成员函数的指针
- 定义格式:
<类型说明符> (<类名>::*<指针名>)(<参数表>)
- 定义格式:
9.1.2 指向对象的指针和对象引用
-
指向对象的指针
- 例 9.2 程序分析:
fun(M m1, M *m2)中 m1 按值传递(拷贝),m2 指针传参 - 输出结果:8,10 / 30,40(m2 指向的对象被修改)
- 例 9.2 程序分析:
-
对象引用
- 例 9.3:
void M::Copy(M &m)与指针版本对比 fun(M m1, M &m2)—— m1 拷贝,m2 引用(即原对象)- 区别:指针可为空、可重新指向;引用必须绑定、不可更改
- 例 9.3:
9.1.3 this 指针
- 每个类的成员函数中隐含一个 this 指针
- 指向当前正在被该成员函数操作的对象
- 例 9.4:
void A::Copy(A &aa) { if(this==&aa) return; *this = aa; }- 防止自赋值,
*this = aa利用 this 指针完成拷贝
- 防止自赋值,
9.2 对象数组和对象指针数组
9.2.1 对象数组
- 例 9.5:
M mm1[3];默认构造;M mm2[4]={M(2,3),M(5,6),M(7,8),M(2,5)}初始化列表 - 输出按行打印各对象的 m,n 值
9.2.2 指向对象数组的指针
- 定义格式:
<类名> (*<指针名>)[大小] - 例 9.6:
A (*pAaa)[3](aa);指向二维数组aa[2][3] - 遍历:
(*(*(pAaa+i)+j)).Print()
9.2.3 对象指针数组
- 例 9.7:分析程序输出,说明对象指针数组用法
可行动点
- 理解指针传参 vs 引用传参的区别:指针可空可改、引用必绑定
- 写 Copy/赋值函数时用
if(this==&aa) return;防自赋值 - 指向数组的指针语法
A (*p)[N]与指向指针的指针A **p不同,注意区分
关联
- 与「PKU_MF_Lab2 - JCL」同属田浩然 C/C++ 教学资料
- 与工作文档中「流式细胞仪 UI 源码」(C#)有面向对象思想的共通性