1 / 252

上机调整 (2 号教学楼 3 楼最东边的教室 )

上机调整 (2 号教学楼 3 楼最东边的教室 ). 第 4 、 5 、 6 周 。 周六 上午 ( 赵小红 )/ 下午 ( 刘勇 )/ 晚上 ( 孙涛 ) , 周日 / 上午 ( 梅天灿 )/ 下午 ( 邓德祥 ) 上机。 第 7 周开始到 18 周 , 偶数周上机 。(按 原计划 ) 每次 4 学时: 周六全天 (上午 8 : 00 ---11 : 30 下午 2 : 00---5 : 30 晚上 6 : 00----9 : 30 ) 周日 (上午 8 : 00 ---11 : 30 下午 2 : 00---5 : 30 ).

olympe
Download Presentation

上机调整 (2 号教学楼 3 楼最东边的教室 )

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 上机调整(2号教学楼3楼最东边的教室) • 第4、5、6周。 • 周六上午( 赵小红 )/下午(刘勇)/晚上(孙涛 ), • 周日/上午(梅天灿 )/下午(邓德祥) 上机。 • 第7周开始到18周,偶数周上机。(按原计划) • 每次4学时: • 周六全天 (上午8:00 ---11:30 下午2:00---5:30晚上6:00----9:30) • 周日 (上午8:00 ---11:30 下午2:00---5:30)

  2. 上机调整(2号教学楼3楼最东边的教室) • 第7周开始到18周,偶数周上机。 • 每次4学时: • 上午8:00 ---11:30 • 下午2:00---5:30 • 晚上6:00----9:30 • 注意: • 是上课的那天,而非周末!

  3. 程序提交方式 • 1、删除项目文件夹中的debug/release文件夹; • 2、把整个项目压缩后提交(就是整个项目的文件夹)。

  4. 第二章 C++面向对象程序设计 面向对象程序设计

  5. 本章内容提要 • 面向对象程序设计概述 • C++类 • 类的继承 • 多态性和虚函数 • 重载 • C++模板 • Microsoft Visual C++的语法扩充

  6. 本章内容提要 • 与传统的面向过程的程序设计语言相比,C++语言的最大特征是支持面向对象程序设计OOP(Object Oriented Programming),它引入了类、继承、多态和重载等面向对象的新机制。通过本章的学习,使我们系统地介绍C++面向对象设计的基本方法。

  7. 本章内容提要(第1节) • 面向对象程序设计概述 • C++类 • 类的继承 • 多态性和虚函数 • 重载 • C++模板 • Microsoft Visual C++的语法扩充 1、传统的结构化程序设计; 2、面向对象程序设计方法及特征;

  8. 本章内容提要(第2节) • 面向对象程序设计概述 • C++类 • 类的继承 • 多态性和虚函数 • 重载 • C++模板 • Microsoft Visual C++的语法扩充 1、类的定义与实现; 2、构造函数和析构函数; 3、this指针; 4、静态成员; 5、友元

  9. 本章内容提要(第3节) • 面向对象程序设计概述 • C++类 • 类的继承 • 多态性和虚函数 • 重载 • C++模板 • Microsoft Visual C++的语法扩充 1、基类和派生类; 2、基类和派生类的构造函数; 3、多重继承; 4、虚基类

  10. 本章内容提要(第4节) • 面向对象程序设计概述 • C++类 • 类的继承 • 多态性和虚函数 • 重载 • C++模板 • Microsoft Visual C++的语法扩充 1、用基类指针指向派生类对象; 2、虚函数; 3、抽象类和纯虚函数

  11. 本章内容提要(第5节) • 面向对象程序设计概述 • C++类 • 类的继承 • 多态性和虚函数 • 重载 • C++模板 • Microsoft Visual C++的语法扩充 1、函数重载; 2、运算符重载

  12. 本章内容提要(第6节) • 面向对象程序设计概述 • C++类 • 类的继承 • 多态性和虚函数 • 重载 • C++模板 • Microsoft Visual C++的语法扩充 1、函数模板; 2、类模板

  13. 本章内容提要(第7节) • 面向对象程序设计概述 • C++类 • 类的继承 • 多态性和虚函数 • 重载 • C++模板 • Microsoft Visual C++的语法扩充 1、VC自定义数据类型; 2、VC运行库; 3、运行时类型识别; 4、编程规范

  14. 结构化程序设计 内 容 提 要 结构化程序设计的特点: • 是一种自上而下、逐步细化的模块化程序设计方法。 • Niklaus Wirth的观点:算法 + 数据结构 = 程序 • 是一种面向过程程序设计方法,即一个程序是由多个过程(在C++中为函数)模块组成,过程之间通过函数参数和全局变量进行相互联系。 面向对象程序设计概述 C++类 类的继承 多态性和虚函数 重载 C++模板 VC的语法扩充

  15. 结构化程序设计的特点 内 容 提 要 • 与非结构化程序相比,结构化程序在调试、可读性和可维护性等方面都有很大的改进。 • 代码重用性不高。 • 由于软、硬件技术的不断发展和用户需求的变化,按照功能划分设计的系统模块容易发生变化,使得开发出来的模块的可维护性欠佳。 • 面向过程模式将数据与过程分离,若对某一数据结构做了修改,所有处理数据的过程都必须重新修订。 面向对象程序设计概述 C++类 类的继承 多态性和虚函数 重载 C++模板 VC的语法扩充

  16. 面向对象程序设计的特点 内 容 提 要 • OOP围绕现实世界的概念来组织模块,采用对象描述问题空间的实体。 • SP是以功能为中心来描述系统,而OOP是以数据为中心来描述系统。相对于功能而言,数据具有更强的稳定性。 • OOP模拟了对象之间的通信。就象人们之间互通信息一样,对象之间也可以通过消息进行通信。 面向对象程序设计概述 C++类 类的继承 多态性和虚函数 重载 C++模板 VC的语法扩充

  17. 面向对象程序设计的特点 内 容 提 要 • OOP把一个复杂的问题分解成多个能够完成独立功能的对象(类),然后把这些对象组合起来去完成这个复杂的问题。 • 一个对象可由多个更小的对象组成。这些对象(类)可由不同的程序员来设计,可在不同程序中使用。 • 采用面向对象模式就象在流水线上工作,我们最终只需将多个零部件(已设计好的对象)按照一定关系组合成一个完整的系统。 面向对象程序设计概述 C++类 类的继承 多态性和虚函数 重载 C++模板 VC的语法扩充

  18. 面向对象程序设计的特点 内 容 提 要 • 对象 = 数据 + 对这些数据的操作 • 面向对象程序设计的四个基本特征: • 抽象 • 封装 • 继承 • 多态 面向对象程序设计概述 C++类 类的继承 多态性和虚函数 重载 C++模板 VC的语法扩充

  19. 继承

  20. 基本数据类型 操作方便! 一看就懂! 代码简单! 内 容 提 要 • 整数类型 int a=10; int b=20; int sum=a+b; //30 cout<<sum; • 浮点数类型 float m=1.5f; float n=3.4f; float sum=m+n; //4.9 cout<<sum; 面向对象程序设计概述 C++类 类的继承 多态性和虚函数 重载 C++模板 VC的语法扩充

  21. 自定义数据类型 内 容 提 要 • 结构体-例如复数 struct Complex { int nReal; int nImaginary; }; Complex cp1, cp2; cp1.nReal=10; cp1.nImaginary=15; cp2.nReal=20; cp2.nImaginary=25; 面向对象程序设计概述 C++类 类的继承 多态性和虚函数 重载 C++模板 VC的语法扩充

  22. 自定义数据类型 操作麻烦! 理解困难! 代码复杂! 内 容 提 要 Complex cpSum; cpSum.nReal = cp1.nReal+cp2.nReal; cpSum.nImaginary = cp1.nImaginary+cp2.nImaginary; cout<<cpSum.nReal<<‘+’<<cpSum.nImaginary<<‘i’; 面向对象程序设计概述 C++类 类的继承 多态性和虚函数 重载 C++模板 VC的语法扩充

  23. C++是否能提供简单、容易的编程方法? Complex cp1(10,15), cp2(20,25); Complex cpSum=cp1+cp2; cout<<cpSum; • 如果能以上面的方式来书写代码,那么一看就懂,代码书写也简单。 内 容 提 要 面向对象程序设计概述 C++类 类的继承 多态性和虚函数 重载 C++模板 VC的语法扩充

  24. 方法1:用结构体实现 C++增强了结构体的功能。 方法2:用类实现 C++的新特性。 C++提供两种方式实现这样的编程 内 容 提 要 面向对象程序设计概述 C++类 类的继承 多态性和虚函数 重载 C++模板 VC的语法扩充

  25. 用结构体实现 void main() { Complex cp1(1, 2), cp2(3, 4); Complex cp = cp1+cp2; cout<<cp<<endl; } 内 容 提 要 struct Complex{ int i; int j; Complex(int ii, int jj) { i=ii; j=jj; } }; ostream& operator <<(ostream& os, const Complex &cp) { cout<<cp.i<<'+'<<cp.j<<'i'; return os; } Complex operator +(const Complex &cp1, const Complex &cp2){ return Complex (cp1.i+cp2.i, cp1.j+cp2.j); } 面向对象程序设计概述 C++类 类的继承 多态性和虚函数 重载 C++模板 VC的语法扩充

  26. 通常不使用结构体的这种新功能! 内 容 提 要 为了维持对C的兼容性而不使用。 面向对象程序设计概述 C++类 类的继承 多态性和虚函数 重载 C++模板 VC的语法扩充 以C++新增功能“类”来实现。

  27. 用类实现 void main() { Complex cp1(1, 2), cp2(3, 4); Complex cp = cp1+cp2; cout<<cp<<endl; } class Complex{ public: int i; int j; Complex(int ii, int jj) { i=ii; j=jj; } }; ostream& operator <<(ostream& os, const Complex &cp) { cout<<cp.i<<'+'<<cp.j<<'i'; return os; } Complex operator +(const Complex &cp1, const Complex &cp2){ return Complex (cp1.i+cp2.i, cp1.j+cp2.j); } 内 容 提 要 面向对象程序设计概述 C++类 类的继承 多态性和虚函数 重载 C++模板 VC的语法扩充

  28. 什么是类(class)? • 类是对一组有相同特性(数据)和相同行为(函数)的对象的描述。 • 例如 “汽车” 描述:是由本身动力驱动,装有驾驶装置,能在固定轨道以外的道路或地域上运送客货或牵引车辆的车辆。 数据:品牌,车高,车长,车宽,轮子的数量,… 行为:行驶,鸣笛,亮灯,… 内 容 提 要 面向对象程序设计概述 C++类 类的继承 多态性和虚函数 重载 C++模板 VC的语法扩充

  29. 如何理解类? • 类实际上也是数据类型。例如,浮点数也有一组特性和行为。区别在于程序员定义类是为了与具体问题相适应,而不是被迫使用已存在的数据类型。 • 结构体只是数据的凝聚(注意:C++中能添加函数),而类是数据和行为的统一。 内 容 提 要 面向对象程序设计概述 C++类 类的继承 多态性和虚函数 重载 C++模板 VC的语法扩充

  30. 什么是对象? • 对象是类的一个实例。例如,汽车是一个类,而行驶在公路上的一辆汽车则是一个对象。 内 容 提 要 面向对象程序设计概述 C++类 类的继承 多态性和虚函数 重载 C++模板 VC的语法扩充

  31. 类与对象的关系 • 类是抽象的,对象是具体的。 • 类相当于数据类型(如:int, float),而对象则相当于变量/常量(如:a, pi, 2, 3.1415)。 内 容 提 要 面向对象程序设计概述 C++类 类的继承 多态性和虚函数 重载 C++模板 VC的语法扩充 变量:变量名为a 数据类型:整数 int a; Car b; 类:类名为Car 对象:对象名为b

  32. 类与对象的使用 • 类与普通的数据类型一样,可声明变量、可作为函数的返回类型; • 对象与普通的变量一样,可作为函数参数、可作为函数的返回值; 内 容 提 要 面向对象程序设计概述 C++类 类的继承 多态性和虚函数 重载 C++模板 VC的语法扩充 void Set(Car c) { m_car = c; } Car Get() { return m_car; } void main { CarmyCar; Set(myCar); }

  33. 一个类的例子:时间类 • 类名:(前面的C表示Class) CTime • 类的数据成员:(m_表示该变量为类的成员变量,n表示为整形变量) 时: int m_nH; 分: int m_nM; 秒: int m_nS; • 类的成员函数: 显示时间:void Show(); 设置时间:void Set(int nH, int nM, int nS); 内 容 提 要 面向对象程序设计概述 C++类 类的继承 多态性和虚函数 重载 C++模板 VC的语法扩充

  34. 一个类的例子:时间类 void main() { CTime t; t.Set(10,28,31); t.Show(); } class CTime { private: int m_nH; int m_nM; int m_nS; public: void Set(int nH, int nM, int nS) { m_nH = (nH>=0 && nH<24)?nH:0; m_nM = (nM>=0 && nM<60)?nM:0; m_nS = (nS>=0 && nS<60)?nS:0; } void Show() { cout<<m_nH<<':'<<m_nM<<':'<<m_nS<<endl; } }; 内 容 提 要 面向对象程序设计概述 C++类 类的继承 多态性和虚函数 重载 C++模板 VC的语法扩充

  35. 类的定义 class 类名 { 成员变量和成员函数列表; }; 内 容 提 要 面向对象程序设计概述 C++类 类的继承 多态性和虚函数 重载 C++模板 VC的语法扩充 千万不要忘了这个分号 ;

  36. 类的定义 class CTime { int m_nH; int m_nM; int m_nS; void Set(int nH, int nM, int nS) { m_nH = (nH>=0 && nH<24) ? nH : 0; m_nM = (nM>=0 && nM<60) ? nM : 0; m_nS = (nS>=0 && nS<60) ? nS : 0; } void Show() { cout<<m_nH<<‘:’<<m_nM <<‘:’<<m_nS<<endl; } }; 内 容 提 要 成员变量 面向对象程序设计概述 C++类 类的继承 多态性和虚函数 重载 C++模板 VC的语法扩充 成员函数

  37. “成员”的含义--属于某类,访问方法不一样 class A { public: int a; }; void main() { a=10; cout<<a<<endl; A a1; a1.a = 10; cout<<a1.a<<endl; } 内 容 提 要 面向对象程序设计概述 C++类 类的继承 多态性和虚函数 重载 C++模板 VC的语法扩充 int a; void main() { a=10; cout<<a<<endl; }

  38. 类的成员就一定能被对象访问吗? • 类的成员就一定能被对象访问吗? 内 容 提 要 面向对象程序设计概述 C++类 类的继承 多态性和虚函数 重载 C++模板 VC的语法扩充

  39. 类成员的访问控制权限 访问:指可使用该变量的值、可改变该变量的值。 class类名 { private: 私有的成员变量和成员函数列表; //只能被自己的成员函数访问 public: 公有的成员变量和成员函数列表; //可被自己的成员函数访问,可通过类的对象访问,可被派生类访问 protected: //其特性将在类的继承中得以体现 受保护的成员变量和成员函数列表; //能被自己的成员函数访问;能被派生类访问。 }; 内 容 提 要 面向对象程序设计概述 C++类 类的继承 多态性和虚函数 重载 C++模板 VC的语法扩充

  40. 类成员的访问权限控制符 成员函数 对象 派生类 public private protected 自己用 爱人用 孩子用

  41. public class B : public A { public: void SetA(int nA) { m_nA = nA; } } void main() { A a; a.m_nA = 10; a.Set(20); } 可被成员函数访问 class A { public: int m_nA; public: void Set(int nA) { m_nA = nA; } void Show() { cout<<m_nA<<endl; } }; 可被派生类访问 可被该类的对象访问 可被成员函数访问

  42. private class B : public A { public: void SetA(int nA) { m_nA = nA; } } void main() { A a; a.m_nA = 10; a.Set(20); } 可被成员函数访问 class A { private: int m_nA; public: void Set(int nA) { m_nA = nA; } void Show() { cout<<m_nA<<endl; } }; 不能被派 生类访问 不能被对 象访问 可被成员函数访问

  43. protected class B : public A { public: void SetA(int nA) { m_nA = nA; } } void main() { A a; a.m_nA = 10; a.Set(20); } 可被成员函数访问 class A { protected: int m_nA; public: void Set(int nA) { m_nA = nA; } void Show() { cout<<m_nA<<endl; } }; 能被派 生类访问 不能被对 象访问 可被成员函数访问

  44. 类的成员应该设置什么访问权限? 为了保护成员变量的安全,通常将它们设置为私有属性。 class CTime { private: int m_nH; int m_nM; int m_nS; public: void Set(int nH, int nM, int nS) { m_nH = (nH>=0&&nH<24) ? nH : 0; m_nM = (nM>=0&&nM<60) ? nM : 0; m_nS = (nS>=0&&nS<60) ? nS : 0; } void Show() { cout<<m_nH<<‘:’<<m_nM<<‘:’<<m_nS<<endl;} }; 成员函数一般为类的接口,是为了让用户操作成员变量,因此设置为公有属性。

  45. 通过接口(成员函数)来访问成员变量 类 其它函数1 公有成员函数1 成员变量1 公有成员函数2 成员变量2 其它函数2 成员变量n 私有成员函数1

  46. 访问权限的作用 • 简化操作; • 数据安全; 汽车 发动 前进 发动机 电气设备 油门 后退 刹车 灯亮、灭 底盘 车身 灯光控制 鸣笛

  47. 类的实现 • 类的实现就是类的成员函数的实现,即定义类的成员函数。 • 类成员函数的定义既可以放在类的定义里面(类体里,自动成为内联函数),也可放在类定义的外面。 内 容 提 要 面向对象程序设计概述 C++类 类的继承 多态性和虚函数 重载 C++模板 VC的语法扩充

  48. 类的实现 成员函数的声明。 成员函数的声明和实现都在类体里面。 class A { private: int a; public: void Set(int na) { a=na; } }; class A { private: int a; public: void Set(int na) ; }; void A::Set(int na) { a = na; } 成员函数的实现。 作用域限定符号 ::

  49. 函数定义在类体里,自动成为内联函数 class A { private: int a; public: void Set(int na) { a=na; } }; class A { private: int a; public: inline void Set(int na) { a=na; } }; inline 可省略

  50. 函数定义在类体外,内联函数声明时必须注明inline函数定义在类体外,内联函数声明时必须注明inline class A { private: int a; public: void Set(int na); }; void A::Set(int na) { a = na; } class A { private: int a; public: inline void Set(int na); }; void A::Set(int na) { a = na; } 不可省略

More Related