第 9 章 复杂对象 —— C++ 语言 ppt 节选

来源:田浩然上传资料 / 0A005-计算机科学技术基础B/C++语言ppt/

9.1 对象指针和对象引用

9.1.1 指向类的成员的指针

  1. 指向数据成员的指针

    • 定义格式:<类型说明符> <类名> *<指针名>
    • 例:int A::*pc = &A::c;
  2. 指向成员函数的指针

    • 定义格式:<类型说明符> (<类名>::*<指针名>)(<参数表>)

9.1.2 指向对象的指针和对象引用

  1. 指向对象的指针

    • 例 9.2 程序分析:fun(M m1, M *m2) 中 m1 按值传递(拷贝),m2 指针传参
    • 输出结果:8,10 / 30,40(m2 指向的对象被修改)
  2. 对象引用

    • 例 9.3:void M::Copy(M &m) 与指针版本对比
    • fun(M m1, M &m2) —— m1 拷贝,m2 引用(即原对象)
    • 区别:指针可为空、可重新指向;引用必须绑定、不可更改

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#)有面向对象思想的共通性