面向对象程序设计与C++语言 第二版 教学课件 ppt 作者 杨庚 王汝传 叶晓国 第八讲n

上传人:E**** 文档编号:89432050 上传时间:2019-05-25 格式:PPT 页数:25 大小:1.43MB
返回 下载 相关 举报
面向对象程序设计与C++语言 第二版  教学课件 ppt 作者  杨庚 王汝传 叶晓国 第八讲n_第1页
第1页 / 共25页
面向对象程序设计与C++语言 第二版  教学课件 ppt 作者  杨庚 王汝传 叶晓国 第八讲n_第2页
第2页 / 共25页
面向对象程序设计与C++语言 第二版  教学课件 ppt 作者  杨庚 王汝传 叶晓国 第八讲n_第3页
第3页 / 共25页
面向对象程序设计与C++语言 第二版  教学课件 ppt 作者  杨庚 王汝传 叶晓国 第八讲n_第4页
第4页 / 共25页
面向对象程序设计与C++语言 第二版  教学课件 ppt 作者  杨庚 王汝传 叶晓国 第八讲n_第5页
第5页 / 共25页
点击查看更多>>
资源描述

《面向对象程序设计与C++语言 第二版 教学课件 ppt 作者 杨庚 王汝传 叶晓国 第八讲n》由会员分享,可在线阅读,更多相关《面向对象程序设计与C++语言 第二版 教学课件 ppt 作者 杨庚 王汝传 叶晓国 第八讲n(25页珍藏版)》请在金锄头文库上搜索。

1、,1.友员有三种形式: 友员类、友员成员函 数和友员函数。 2.友员可以访问并修改 类的私有或保护数据 调用类的私有或保护 成员函数,使类既有 封装性,又有灵活性 3.友员关系不能传递, 不是互逆的。,第八讲 类与对象 4.5 静态成员和对象组织 4.6 模板,静态成员,为什么引入静态成员 创建了一个对象,则这个对象将拥有所有类中的成员,如果某个数据对所有对象都一样,则这个数据只要有一个拷贝,而不是每个对象都重复定义这个数据,形成内存浪费。简言之:一个数据拷贝,所有对象共享。,4.5 静态成员和对象组织,例如有类: class student char *name, *num; int tot

2、al; /学生总人数 public: ; 应用程序中声明对象为: student a, b, c; 则对象a,b,c 中都有数据 total,而学生总数是一样的,所以total 被重复定义了两次。若把 total 声明为静态成员,就可避免这个问题。,4.5 静态成员和对象组织,静态数据成员,定义形式 在所要定义的数据成员前加关键字 static, 如:,class student char *name, *num; static int total; public: ; 将学生总人数 total 声明为静态成员,4.5 静态成员和对象组织,例1:静态数据成员的应用(与教材例题不同),#incl

3、ude #include class st_n public: ;,st_n(char *, char *); st_n( ); void print( );,char *name, *num; /学生姓名、学号。 static int total; /学生总人数, 静态数据,4.5 静态成员和对象组织,st_n:st_n(char *n1, char *n2) name=new charstrlen(n1)+1; num =new charstrlen(n2)+1; strcpy(name, n1); strcpy(num, n2); +total; /学生人数加1 ,int st_n:to

4、tal=0; /静态成员的初始化,void st_n:print( ) cout “n name:“ name “n num: “ num “n total: “ total; ,st_n:st_n ( ) delete name; delete num; - -total; /学生人数减1 ,4.5 静态成员和对象组织,void main( ) st_n a(“Wang “, “000001 “); st_n b(“Yang “, “000002 “); st_n c(“ Tang “, “000003 “); a.print( ); b.print( ); ,结果: name: Wang

5、num: 000001 total: 3 name: Yang num: 000002 total: 3,注意:a, b, c 的 total 都是3,即说明静态成员只有一个, 且为所有对象共享。,4.5 静态成员和对象组织,例1 有关内容总结,1. total 被声明为静态成员数据,a,b,c三个对象共享 这个数据成员,即只有一个拷贝。,2. 静态数据必须在应用之前初始化, 格式为: 类型名 类名:数据名=初始值; 如: int st_n:total = 0;,3. 静态数据可声明为 private 或 public.,4.5 静态成员和对象组织,静态函数,注意点 只能访问静态数据, 不能访

6、问其它成员。 可以没有对象而进行函数调用。,目的: 对静态数据成员进行访问修改。,形式: 在一般函数声明前加 static,4.5 静态成员和对象组织,例:静态函数的应用(接前例),#include #include class st_n public: ;,st_n(char *, char *); st_n( ); void print( ); static int getTotal( ); /静态函数,char *name, *num; /学生姓名、学号。 static int total; /学生总人数, 静态成员,4.5 静态成员和对象组织,st_n:st_n(char *n1, c

7、har *n2) name=new charstrlen(n1)+1; num =new charstrlen(n2)+1; strcpy(name, n1); strcpy(num, n2); +total; /学生人数加1 ,int st_n:total=0; /静态成员的初始化,4.5 静态成员和对象组织,void st_n:print( ) cout “name:“ name endl; “num: “ num endl; ,st_n:st_n ( ) delete name; delete num; - -total; /学生人数减1 ,int st_n:getTotal( ) /定

8、义静态函数 return total; /只能访问静态函数 ,4.5 静态成员和对象组织,void main( ) st_n a(“Wang “, “000001 “); st_n b(“Yang “, “000002 “); st_n c(“ Tang “, “000003 “); a.print( ); cout “ total: “ a.getTotal endl; b.print( ); cout “ total: “ st_n:getTotal endl; ,结果: name: Wang num: 000001 total: 3 name: Yang num: 000002 tota

9、l: 3,4.5 静态成员和对象组织,例2 有关内容总结,1. 函数getTotal 被声明为静态成员函数;,2. 静态函数可以通过对象调用, 也可以通过无对象调用; 如: a.getTotal( ); /由对象调用 st_n:getTotal( ); /由类属名调用,3. 静态函数只能对静态数据进行操作, 不能对其它数据 进行操作。,4.5 静态成员和对象组织,模 板 (template),什么要定义模板 对不同类型的数据进行同样的操作, 由于类型不同这些操作要重复定义, 如求两数的和: int add(int a, int b) return a+b; float add(float a,

10、 float b) return a+b; 前者为求两整数的和,后者为求两实数的和,函数体内的操作都一样,但我们必须重复这些定义, 如果应用模板,可将类型参数化, 只建立一个抽象的形式, 具体作用于什么类型到应用时再决定。,4.6 模板,函数模板,例3. 函数模板 的应用,#include template /声明模板 void sort(Type x , int size) for (int i=0; ixj ) Type t=xi; xi= xj; xj=t; ,4.6 模板,void mian( ) int a =4, 3, 4, 5, 8, 9; double d9=2.0, 4.3,

11、 1.8, 9.5; sort(a, 6); /对整型数进行排序 sort(d, 9); /对双精度实型进行排序 cout “ n output sort for int a: “ for(int i=0; i6; i+) cout ai “ , “; cout “ n output sort for double d: “ ; for(int j=0; j9; j+) cout dj “, “; ,结果: output sort for int a: 3, 4, 4, 5, 8, 9, output sort for double d: 0.0, 0.0, 0.0, 0.0, 0.0, 1.

12、8, 2.0, 4.3, 9.5,4.6 模板,例3 有关内容总结,1. 定义了一个模板函数 sort, 将类型声明为函数的形式参数;,2. 在函数的具体调用中, 形式参数的类型为 : int 和 double;,3. 仅定义了一个模板, 可应用于多种类型, 使编程简便, 代码 重用;,4. 类型放在 中, 而不是 或 ( ) 中。,4.6 模板,例4. 函数模板的应用,#include template /声明模板 T max(T a, T b) return (ab? a:b); ,void main( ) int a=9, b=99; cout “max(a,b): “ max(a,b)

13、 endl; float c=5.0, d=9.0; cout “max(c,d): “ max(c,d) endl; ,4.6 模板,结果: max(a,b): 99 max(c,d): 9.0,例4 有关内容总结,1. 定义了一个模板函数 max, 将类型声明为函数的形式参数。 具体形式为: template T max( T a, T b) ,2. 在函数的具体调用中, 形式参数的类型为int 和 double。,3. 仅定义了一个模板, 可应用于多种类型, 使编程简便, 代码重用。,4.6 模板,1. 静态成员有: 静态数据和静态函数。,2. 静态成员可以通过对象调用, 也可以通过类属

14、直接调用, 如: cout a.getTotal( ); /对象调用 cout st_n:getTotal( ); / 类属调用,3. 不管创建多少对象, 静态成员只有一个拷贝, 所有对象共享 这个静态成员。,4. 静态数据必须初始化, 静态函数只能对静态数据进行操作。,5. 定义了一个模板, 可应用于多种类型, 使编程简便, 代码重用。,一. 判断题(说明理由) 1. 静态数据只可以由静态函数 访问和修改。 2. 静态数据为所有对象共享, 所以可认为静态数据是属于 类的, 而不是属于对象的。 3. 静态数据和函数只能声明为 公有类型。,二. 应用静态数据和静态函数的作用是什么? 静态数据与普

15、通数据有何区别?,三. 改错并说明理由: (1) include ; class example ( ) private: int date; static int count public; void example( int y= 10) ( date=y;) static int getcount ( cout “date=“ date; return count; ) ,(2) Template (class T) T max(T a; T b; Tc ); /求 a,b,c 的最大值 int t; if(ab) if(ac) t=a else t=c; else; if(bc) t=c; else t=b; ;,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号