第3章_关于类和对象的进一步讨论讲述.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Date::Date(int m,int d,int y) //类Date的构造函数 { month=m; day=d; year=y; } int main( ) { Time t1(10,13,56); //定义Time类对象t1 Date d1(12,25,2007); //定义Date类对象d1 t1.display(d1); //调用t1中的display函数, //实参是Date类对象d1 return 0;} * 说明: (1)提前引用声明,即在正式声明一个类之前,先声明一个类名,表示此类将在稍后声明。如: class Date; 它只包含类名,不包括类体。 在一般情况下,类必须先声明,然后才能使用它。但是在特殊情况下,如上例,Time类要用到Date类,而Date类要使用Time类,形成了“连环套”,谁先定义都不能解决问题,故需要使用提前引用声明。无论何时,只有在正式声明一个类以后才能用它 * 定义对象。利用提前引用声明,当然不能定义对象,但可以用该类的名字去定义指向该类对象的指针变量或对象的引用。 (2)由于在Date类中声明了Time类中的display成员函数是Date类的“朋友”,因此该函数可以引用Date类中所有的数据(包括公有的和私有的数据)。 (3)display函数的实参是Date类对象d1。 (4)在Time::display函数中引用Date类私有数据时必须加上对象名,如:d.month (5) display(const Date da)中const的作用 * 3. 一个函数(包括普通函数和成员函数)可以被多个类声明为“朋友”,这样就可以引用多个类中的私有数据。 例如:可以将例3.13程序中的display函数不放在Time类中,而作为类外的普通函数,然后分别在Time和Date类中将display声明为朋友,在主函数中调用display函数, display函数分别引用Time和Date两个类的对象的私有数据,输出年、月、日和时、分、秒。 见C3-13-2.CPP (C3-13-3.CPP解释const的作用) * 3.10.2 友元类 不仅可以将一个函数声明为一个类的朋友,而且可以将一个类(如B类)声明为另一个类(如A类)的朋友。这时,B类就是A类的友元类。友元类B中的所有函数都是A类的友元函数,可以访问A类中的所有成员。 在A类的定义体中用以下语句声明B类为其友元类: friend B; 声明友元类的一般形式为: friend 类名; * 说明: (1)友元关系是单向的而不是双向的。 如B类是A类的友元类,并不等于A类也是B类的友元类,A类中的成员函数不能访问B类中的私有数据。 (2)友元的关系是不能传递的。 如:B类是A类的友元类,C类是B类的友元类,不等于C类是A类的友元类。 一般情况下,并不把整个类声明为友元类,而只将确实有需要的函数声明为友元函数。 * 3.11 类模板 前面介绍并使用了函数模板:即对于功能相同而数据类型不同的一些函数,不必一一各个函数,可以定义一个对任何类型变量进行操作的函数模板,在调用函数时,系统会根据实参的类型,取代函数模板中的类型参数,得到具体的函数,这就就可以简化程序设计。 对于类的声明,也有同样的问题。有时,有两个或多个类,其功能是相同的,仅仅是数据类型不同。如下面声明的类: * class Compare_int {public: Compare( int a , int b ) { x=a;y=b;} int max( ) { return (xy)?x:y; } int min( ) { return (xy)

文档评论(0)

70后老哥 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档