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