Chapt 2 class and object

2020-03-01 199浏览

  • 1.第2章 类与对象
  • 2.主要内容  2.1 概述  2.2 类的声明与对象的定义  2.3 类的成员  2.4 数据成员和函数成员的引用  2.5 举例  2.6 类的封装和信息隐藏 19/5/14 浙江理工大学 孙树森 2
  • 3.19/5/14 浙江理工大学 孙树森 3
  • 4.19/5/14 浙江理工大学 孙树森 4
  • 5.19/5/14 浙江理工大学 孙树森 5
  • 6.2.1 概述 实体概念 建模 实 例 化 抽 象 现象 19/5/14 类 模拟 浙江理工大学 参考系统 具 体 对象 孙树森 面向对象程序设 6
  • 7.2.1.1 类的引入  车号为”浙 A 00000” 的奔驰轿车——是物质 ,是具体的,是现实世界中客观存在的;轿 车——是意识,是抽象的 , 是人们用于概括 客观世界中某类事物的一个概念。一般可以 用如下两种方法构造类:  直接法  间接 法 19/5/14 浙江理工大学 孙树森 7
  • 8.2.1.1 类的引入 1. 直接法  现实世界的某些概念可以直接映射为 OOP 中的 类:鱼,动物,轿车等。  上述概念中的具体事物可以直接作为 OOP 的对 象 : 超市里买的一条鲤鱼 , 他家的小狗 , 张三的 轿车。 2. 间 接 法  OOP 中的类需要从现实世界中的概念进一步抽 象:交易,课程。  这种概念的具体事例可以作为对象。 19/5/14 浙江理工大学 孙树森 8
  • 9.2.1.2 对象及其属性和行为  对象:现实世界中的事物、事件、事情  对象的属性:描述对象的静态特征  对象的行为 : 描述对象的动态特征  消息:外界通过消息与对象进行作用  类是对一组具有相同属性、表现相同行 为的对象的描述。类是对象的抽象。  对象的属性——类的数据成员  对象的行为——类的函数成员 19/5/14 浙江理工大学 孙树森 9
  • 10.2.1.3 面相对象程序设计的特点  封装性:通过类封装了对象的属性和行为, 实现了信息隐藏  继承性:继承机制通过在已有类的基础上建 立新类,实现了软件重用。  多态性:对于相同的外界消息,相似但有不 同的对象,表现出不同的行为。多态离不开 继承。  对象 = 算法 + 数据结构  程序 = 对象 s+ 消息 19/5/14 浙江理工大学 孙树森 10
  • 11.2.1.4 面向对象软件开发 1. OOA 2. OOD 3. OOP 4. OOT 5. OOSM  分析设计编程测试维护 19/5/14 浙江理工大学 孙树森 11
  • 12.2.2.1 类和对象的关系  程序设计时:设计类  把类作为数据类型声明变量——对象( objec t)  类是对象的抽象  对象是类的具体实例 (instance) 19/5/14 浙江理工大学 孙树森 12
  • 13.2.2.2 类的声明  C++ 语言用保留字 class 声明一个类:  class classname{ public: 公有数据和函数 protected: 保护数据和保护函数 private: 私有数据和函数  };  19/5/14 浙江理工大学 孙树森 13
  • 14.2.2.2 类的声明 ( 续 1)  类名 必间 是一个有效的 间 间 间 间 间 间 C++ 标识符,不能是 C++ 语     言的保留字,通常类名全部大写或用大写 C 开头。 花括号” {“ 和” }” 之间的部分为类的内容。 最后的分号” ;” 作间 间 间 声明的 间间间间 束 , 不能漏掉 . 类中定义的数据和函数分别称为数据成员 ( 成员变 量 ) 和成员函数。 public, protected,private:修间 成 间间间间 量和成 间间间间 函数 间 的访问控制 . 可以多次出现 , 缺省是 private. 也就是 说这三个关键字可以出现任意多次 ( 0 次或者多次 ). 19/5/14 浙江理工大学 孙树森 14
  • 15.2.2.2 类的声明 ( 续 2)  成员变量  成员变量的声明方式与普通变量相同 , 其数据类型允许是 , 除     了当前正在定义的类之外的任何数据类型 ( 包括自定义类型 ) 。 类中数据成员在声明时不允许使用表达式进行初始化,例如 以下声明是不合法的: class CStudent{private:int m_age=0; CStudent m_ThisClass;//error CStudent * m_pThisClas;//OK }; 成员变量不许用 auto,register,extern 修饰 , 但可用 static,con st, mutable,volatile 修饰 . 19/5/14 浙江理工大学 孙树森 15
  • 16.2.2.2 类的声明 ( 续 3)  成员函数 声明函数与普通函数类似 . 成员函数可以用 friend, inline 和 static, const 修饰 . 常量成间 函数声明如下 间 间间 间间间 :  class CStudent{  … public: int GetAge() const;  …  };  非成员函数不能声明为常量函数 . 19/5/14 浙江理工大学 孙树森 16
  • 17.2.2.3 定义对象的方法 (1) 1. 现声明类,在用类定义对象, eg : class CStudent{ …. }; CStudent zhangsan, John; class CStudent Chrispinstin; 19/5/14 浙江理工大学 孙树森 17
  • 18.2.2.3 定义对象的方法 (2) 2. 声明类的同时定义对象 class CStudent{ …..} Jane, *pStudent; 3. 直接定义无类名对象 class {…}no_name_object ; 4. 先声明类 ( 称为引用性声明 ) ,再定义类 class CStudent; class CLesson{ CStudent * pStud;…}; class CStudent {….}; 19/5/14 浙江理工大学 孙树森 18
  • 19.2.2.4 类和结构体的异同  结构体的成员不做访问属性修饰,缺省 publi c  类的成员不做访问属性修饰,缺省 private  描述一个没有行为的对象时,建议用 struct  有行为的对象,建议用类 19/5/14 浙江理工大学 孙树森 19
  • 20.2.2.4 类和结构体的异同  demo 19/5/14 浙江理工大学 孙树森 20
  • 21.2.3 类的成员           class CStudent { int m_num; int m_score;public:void set_num(int ); void set_score(int); inline int get_num() const {return m_num;} inline int get_score() const {return m_score;} }; CStudent tom; 19/5/14 浙江理工大学 孙树森 21
  • 22.2.3.1 类的成员的性质  类的成员函数和成员变量可以分为:  public( 公有的 ) tom.set_score;// OK  private( 私有的 ) tom.m_score=99;// error  protected( 受保间 的 间 ) :在继承中讲,这里当 private 看待 19/5/14 浙江理工大学 孙树森 22
  • 23.2.3.2 类外定义的成员函数  在类体外定义成员函数的格式:  函数类型 类名 :: 函数名 ( 参数表 ) { // 函数体 } 19/5/14 浙江理工大学 孙树森 23
  • 24.2.3.2 类外定义的成员函数          class CStudent { int m_num; int m_score;public:inline int get_num() const {return m_num;} inline int get_score() const {return m_score;} }; voidCStudent::set_num(intnum ){ m_num= num;} voidCStudent::set_score(ints){m_score=s;} 19/5/14 浙江理工大学 孙树森 24
  • 25.2.3.3 inline 成员函数  inline 关键字只是建议  类内定义的成员函数可以省略 inline, 隐含为 i nline , 建议加上。  函数的声明或定义之一作 inline 声明即可。  类外定义 inline 函数时,必须把类的声明和 函数定义放在同一个文件 ( 源文件或头文件 ) 中。 19/5/14 浙江理工大学 孙树森 25
  • 26.2.3.4 类成员的存储方式       CStudent{public:static int m_count; int m_fun1(); void show_mem(){cout<<&m_count