《面向对象编程技术》由会员分享,可在线阅读,更多相关《面向对象编程技术(65页珍藏版)》请在金锄头文库上搜索。
1、第四章 类与对象 类和对象 构造函数与析构函数 面向对象的基本特点 类的组合 前向引用说明 类模板/以后介绍 面向对象标记 要点回顾认识事物的 规律:由简 单到复杂!顺 序体现第三版 本改进了一、 类与对象 类概述1. 类是具有相同属性和行为的一组对象的抽象集 合,为该类的全部对象提供了统一的抽象描述, 包括属性和行为两个主要部分。2. 利用类可以实现数据的封装、隐藏、继承与派生 。3. 利用类易于编写大型复杂程序,其模块化程度比 C中采用函数更高。慢慢体会类是一种用户自定义类型,声明形式: class 类名 public:公有成员(外部接口)private:私有成员protected:保护型
2、成员 2. 类的定义:时钟类的成员 (数据成员与函数成员声明) class Clock private: int Hour, Minute, Second;public: void SetTime(int NewH, int NewM,int NewS);void ShowTime( );成员函数数据成员void Clock : SetTime(int NewH, int NewM, int NewS) Hour=NewH;Minute=NewM;Second=NewS; void Clock : ShowTime( ) cout成员名”方式访问 public 属性的成员返 回二、构造函数与析
3、构函数 构造函数名与类名相同 构造函数的作用是在对象被创建时使用特定的值构造对象 ,或者说将对象初始化为一个特定的状态。 在对象创建时由系统自动调用。 如果程序中未声明,则系统自动产生出一个缺省形式的构 造函数1. 构造函数定义及使用构造函数举例class circle public:int radius;int area();circle(int r);int area(int r);circle:circle(int r)radius=r;int circle:area()return (int)3.14*radius*radius;void main()circle circle1(5)
4、;cout 类声明六、类模板使用类模板使用户可以为类声明一种模式,使 得类中的某些数据成员、某些成员函数的参数、 某些成员函数的返回值,能取任意类型(包括系 统预定义的和用户自定义的)目的:格式:template 函数模板定义比较书上的例子:请先阅读5minsstruct student int id; float gpa; ; template class store private: T item; int havevalue; int flag; public: store(void); T getelem(void); void putelem(T x); ;templatestore
5、:store():havevalue(1),flag(99) templateT store:getelem(void)if(havevalue=0)coutvoid store:putelem(T x) havevalue+;item=x;void main() student g=1000,23;stores1,s2;s1.putelem(3);s2.putelem(7);couthavevalueradius;/error初始 化禁止访问 私有数据返回返回返 回七、面向对象标记两种方法UML:统一建模语言专业的面向对象建模语言,功能强大较复杂Coad/Yourdon 类图描述简单明晰难以
6、描述成员的访问控制UML对象名数据成员函数成员类名数据成员函数成员 Coad/Yourdon消息继承包含返 回要点回顾1.类与对象的概念2.基本类的定义与使用1.类定义的格式:class name 2.访问控制3. 对象创建与撤销1.类内、类外的理解2.数据成员与函数成员的区别3.public 与private:公共接口与隐藏 1.构造、析构函数:公有、无返 回值2.拷贝构造函数3. 组合类1.定义:类中内嵌对象 ? 问:内嵌类的定义是组合类吗2. 组合类构造与析构:调用顺序4. 类模板1.设计思想:数据处理的通用性,参数化程序设计2. 适用范围:普通数据类型、自定义数据类型、类3. 注意事项
7、:成员函数是模板函数、代码要通用 返 回Class Apublic:int a,b,c; private:int x,y,z; 返 回A a1,a2,a3;Class Apublic:int a,b,c; private:int x,y,z; 公共接口内部数据,隐私返 回1.构造函数与析构函数的功能?2.默认构造函数:系统可以产生缺省的构造函数与析构函数3.构造函数可以重载,析构函数可以重载吗?返 回1. 为什么需要拷贝构造函数?格式:类名(类名 class innerpublic:int b;inner()cout函数定义(内部使用T) template 类定义 请看下例 :class cl
8、ass_studentpublic:int id; float gpa;class_student(int a,float b)id=a;gpa=b;class_student();struct struct_student int id;float gpa;template class store private:T item;int havevalue;int flag;public:store(void);T getelem(void);void putelem(T x);templatevoid store:putelem(T x) havevalue+;item=x;这样做可以 吗? Storecla_s1;storestr_s1;回答:1.请大家一起 看完例子寻找结论2.无论是函数模板还是类模板,其基本目标是一致的,皆为 能处理多种类型的数据,只不过一种实现的载体是函数,一 种实现的载体是类实践去探讨 ,领会!单元自测(45分钟)见WORD 文档面向对象的现实渊源现实中的简化模 型冯.诺依曼 计算机遗传算 法神经网络谁来开这加飞 机?跳 回