公用数据友元类模板.ppt

上传人:sh****n 文档编号:2926693 上传时间:2019-12-04 格式:PPT 页数:27 大小:349.81KB
返回 下载 相关 举报
公用数据友元类模板.ppt_第1页
第1页 / 共27页
公用数据友元类模板.ppt_第2页
第2页 / 共27页
公用数据友元类模板.ppt_第3页
第3页 / 共27页
点击查看更多>>
资源描述
3.4 共用数据的保护,本节主要内容 3.4.1 常对象 3.4.2 常对象成员 3.4.3 指向对象的常指针 3.4.4 指向常对象的指针变量 3.4.5 对象的常引用,1,3.4 共用数据的保护,3.4.1 常对象 作用:定义一个对象时,当其数据成员的值不希望被修改时,定义该对象为常对象。 与定义常变量类似,必须赋初值。 定义格式: 类名 const 对象名 (实参列表) 或 const 类名 对象名 (实参列表),2,3.4 共用数据的保护,3.4.1 常对象 常对象不能调用非const型的成员函数,除系统自动调用的构造函数和析构函数之外。 常对象的所有数据成员的值是不能被修改的。 例: const time t(10,15,15); 或 time const t(10,15,15); t.get_time(); /要求必须是常成员函数,3,3.4 共用数据的保护,3.4.1 常对象 常对象的所有数据成员的值是不能被修改的。 编程时出现修改常对象数据成员值的需求,则将数据成员声明为可变的数据成员,加mutable。 例: class mutable int hour; ; const time t(10,15,15); t.get_time(); void time:get_time() hour+=10; ,4,3.6 共用数据的保护,本节主要内容 3.6.1 常对象 3.6.2 常对象成员 3.6.3 指向对象的常指针 3.6.4 指向常对象的指针变量 3.6.5 对象的常引用,5,3.6 共用数据的保护,3.6.2 常对象成员 (一)常数据成员 与定义常变量一样。 int const year; 或 const int year; 只能通过构造函数的参数初始化表对常数据成员进行初始化。 Date:Date (int y):year(y) 对常数据成员,该类所有对象中的该数据成员的值都是不能改变的,但不同的对象中该数据成员的值是可以不同的。,6,3.6 共用数据的保护,3.6.2 常对象成员 (二)常成员函数 常成员函数只能引用本类中的数据成员,而不能修改它们。 注意:声明和定义时都要加const关键字。 例:void get_time( ) const; 常成员函数引用数据成员情况表 (p90) 常对象中的成员函数未加const声明,编译器默认为非const成员函数。,7,3.6 共用数据的保护,本节主要内容 3.6.1 常对象 3.6.2 常对象成员 3.6.3 指向对象的常指针 3.6.4 指向常对象的指针变量 3.6.5 对象的常引用,8,3.6 共用数据的保护,3.6.3 指向对象的常指针 指向对象的常指针:将指向对象的指针变量声明为const。 特点:指向不能改变,即声明时必须初始化。但可以改变指向对象数据成员的值。 一般形式: 类名 * const 指针变量名= 常用作函数的形参,避免在函数的执行过程中改变指针变量的指向。,9,P只能指向t1,3.4 共用数据的保护,本节主要内容 3.4.1 常对象 3.4.2 常对象成员 3.4.3 指向对象的常指针 3.4.4 指向常对象的指针变量 3.4.5 对象的常引用,10,3.4 共用数据的保护,3.4.4 指向常对象的指针变量 (一)指向常变量的指针变量 格式: const 类型 * 指针 或者 类型 const * 指针; 例如:const int a=5; /定义常变量 const int *p= /指向一个常变量 特点:定义后,指针的指向可以改变,但指针指向对象的内容(值)不可以改变。 例:,11,12,void main( ) const int a = 78 ; const int b = 25 ; int c = 13 ; const int *pi = /正确 ,3.4 共用数据的保护,3.4.4 指向常对象的指针变量 (二)指向常对象的指针变量 常对象,只能用指向常对象的指针指向它。 指向常对象的指针可以指向一个非常对象。 如果要改变非常对象数据成员的值可以直接改,但不能通过该指针改变。 例: Time t1(2,34,54); const Time *p=(),13,指向常对象的指针,非常对象,3.4 共用数据的保护,本节主要内容 3.4.1 常对象 3.4.2 常对象成员 3.4.3 指向对象的常指针 3.4.4 指向常对象的指针变量 3.4.5 对象的常引用,14,3.4 共用数据的保护,3.4.5 对象的常引用 (一)变量的常引用 例: int a=24; const int /错误,常引用不能被更改,15,3.5 共用数据的保护,3.4.5 对象的常引用 (二)对象的常引用 例: void fun(const Time ,16,在函数中不能改变t的值,t1的值也不能改变,3.4 共用数据的保护,小结 理解常对象、常对象成员的定义和引用方式 理解指向对象的常指针的定义和引用方式 了解指向常对象的指针变量的定义和引用方式 理解对象的常引用的定义和引用方式,17,在一个类中可以有公用的(public)成员和私有的(private)成员。在类外可以访问公用成员,只有本类中的函数可以访问本类的私有成员。现在,我们来补充介绍一个例外友元(friend)。 友元可以访问与其有好友关系的类中的私有成员。友元包括友元函数和友元类。,9.10 友元,如果在本类以外的其他地方定义了一个函数,在类体中用friend对其进行声明,此函数就称为本类的友元函数。友元函数不属于该类,但可以访问该类中的私有成员。,9.10.1 友元函数,1、将普通函数声明为友元函数 2、友元成员函数: friend函数是另一个类中的成员函数。 类的提前引用声明 3、 一个函数(包括普通函数和成员函数)可以被多个类声明为“朋友”,这样就可以引用多个类中的私有数据,将一个类(例如B类)声明为另一个类(例如A类)的“朋友”。则友元类B中的所有函数都是A类的友元函数,可以访问A类中的所有成员。 声明友元类的一般形式为 friend 类名; 如:class A friend B; ;,9.10.2 友元类,说明: (1) 友元的关系是单向的而不是双向的。 (2) 友元的关系不能传递。 在实际工作中,除非确有必要,一般并不把整个类声明为友元类,而只将确实有需要的成员函数声明为友元函数,这样更安全一些。,友元的利弊: 面向对象程序设计的一个基本原则是封装性和信息隐蔽,而友元却可以访问其他类中的私有成员,不能不说这是对封装原则的一个小的破坏。 但是它能有助于数据共享,能提高程序的效率,在使用友元时,要注意到它的副作用,不要过多地使用友元,只有在使用它能使程序精炼,并能大大提高程序的效率时才用友元。,3.8 类模板,函数模板 一般形式 Template 类模板 为什么要有类模板,为什么要使用类模板 如果要对功能相同、仅类的数据类型不同的各种情况,都重新定义一种新的类型,会产生较大的重复。例如:,class compare_int public: compare_int (int a, int b ) x=a; y=b; int max( ) return (xy)? x : y; private: int x,y; ; class compare_char public: compare_char (char a, char b ) x=a; y=b; char max( ) return (xy)? x : y; private: char x,y; ;,void main( ) compare_int c1( 5, 6 ); cout c1.max( ) endl; compare_char c2(a, f); cout c2.max( ) endl; ,类模板的定义: 为解决这一问题,C+引进类模板的概念。我们在类的声明前先加一行模板关键字。它用一个通用参数 T 来替代不同的数据类型。类模板的定义格式为: template class /类体说明 ; 其中template 是关键字;中可以有多个参数,其间用逗号分隔。 使用类模板定义对象的: 类模板名 对象名( 实参列表 ); 例如:下面是一个数组类模板的例子,#include template class compare public: compare (T a, T b ) x=a; y=b; T max( ) return (xy)? x : y; private: T x,y; ; void main( ) compare cmp1(3,7); cout cmp2(a,g); cout cmp3(1.0, 3.0); coutcmp3.max( )“是两个浮点数中最大的数“endl; ,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!