Skip to content

面向对象编程

课程目标

  • 面向对象编程
  • 面向对象编程注意事项

面向过程

  • 主函数
  • 调用1
  • 调用2
  • 调用3
  • 面向过程
面向过程程序设计思路
  • 提出问题
  • 分析问题的处理流程
  • 将大问题分解为小问题
    • 如果小问题比较复杂,就继续划分小问题为更小的问题
  • 然后通过小模块——解决小问题
  • 最后再根据整个业务流程将这些小问题串在一起(调用函数)

面向对象

  • 对象1
    • 属性
    • 行为
  • 方法
  • 对象2
    • 属性
    • 行为
  • 面向对象
面向对象程序设计思路

面向对象会把事物抽象成对象的概念,先抽象出对象,然后给对象赋一些属性和方法,然后让每个对象去执行自己的方法。

面向过程的优缺点

优点:
流程化使得编程任务明确,在开发之前基本考虑了实现方式和最终结果,具体步骤清楚,便于节点分析。
效率高,面向过程强调代码的短小精悍,善于结合数据结构来开发高效率的程序。

缺点:
耦合度高,扩展性差,后期维护难度比较大。

面向对象的优缺点

优点:
结构清晰,程序是模块化和结构化,更加符合人类的思维方式;
易扩展,代码重用率高,可继承,可覆盖,可以设计出低耦合的系统;
易维护,系统低耦合的特点有利于减少程序的后期维护工作量。

缺点:
开销大,程序显得臃肿。
性能低,因为创建对象和销毁对象都需要损耗一定的性能。

面向对象三大特征

  1. 封装
  2. 继承
  3. 多态

对象

万物皆对象。任何事物都可以看做对象。

描述对象

类似于结构体变量,通过对象的属性(名词,数量词,形容词...)和行为(动词)来描述对象。
任何对象都属于一个类型。
有物体,东西的意思,现实世界中,一切都是对象(是一个具体存在的实体)。
任何对象都有属性和行为。

类是将多个对象的共性提取出来定义的新的数据类型,是对对象属性和行为的抽象描述。类似于结构体类型。
类和对象的关系是抽象和实例化的关系。

类的定义
cpp
class 类名  
{  
访问控制属性:  
    //行为:用成员函数表示  
    返回类型 函数名(形参表); //成员函数  

    //属性:用成员变量表示  
    数据类型 变量名; //成员变量  
};

访问控制属性

  • public: 公有成员, 类的内部和外部都可以访问的成员
  • protected: 表示该下面的数据成员、成员函数受保护权限,在类内可以访问,类外只有子类可以访问
  • private: 私有成员, 只有在类的内部才可以访问的成员

使用 class 定义的类默认的访问控制属性是 private

类的大小

在类中,只有成员变量占用内存空间,而成员函数是不占用内存空间的。
类占用的内存空间永远是所有成员中占用内存最大成员的倍数(对齐问题)。
空类的大小为1。

类的实例化

用类似对象的过程叫做实例化。与结构体变量定义相似。

类内成员访问

与结构体变量访问结构体成员一样通过 . 来访问。

this指针

定义:
类的内部都隐藏一个该类类型的指针参数,名为 this,可以帮助我们区分类内成员和其他参数。

面向对象编程的注意事项

  1. 要确定所设计的类,那些属性和行为是对外公开的,哪些是隐藏的。

  2. 要符合高内聚,低耦合的设计思想。

  3. 在定义类的时候,所有的 class 都可以被替换为 struct,代码不会出错。

  4. 在写类的时候,一般一个标准的类都分为两个文件(.h/.cpp):

    • 在头文件中声明类型和函数
    • 在源文件中实现函数
  5. 只读成员函数(常函数):

    • 表示这个成员函数是只读成员函数,只能读取成员变量的值,保证不修改成员变量的值。
    • 成员函数的常版本与非常版本可构成有效重载,常对象调用常版本,非常对象调用非常版本。

知识如风,常伴吾身