C程序设计《面向对象的妥协》.ppt
《C程序设计《面向对象的妥协》.ppt》由会员分享,可在线阅读,更多相关《C程序设计《面向对象的妥协》.ppt(37页珍藏版)》请在三一办公上搜索。
1、C+程序设计,面向对象的妥协,本章学习要点,友元函数友元类静态数据成员静态成员函数,第6章 面向对象的妥协,本章学习目标,了解友元函数的概念,掌握友元函数的定义与使用了解友元类的概念掌握静态数据成员的定义与使用掌握静态成员函数的定义与使用,第6章 面向对象的妥协,友元可以访问与其有好友关系的类中的任何成员。,6.1 封装的破坏友元,友元,友元函数,友元类,如果在本类以外的其他地方定义了一个函数(这个函数可以是不属于任何类的普通函数,也可以是其他类的成员函数),在类体中用friend对其进行声明,此函数就称为本类的友元函数。友元函数可以访问这个类中的任何成员。如何将普通函数声明为友元函数呢?看下
2、面这个简单的例子:,6.1 封装的破坏友元,6.1.1 友元函数,【例6-1】友元普通函数。,#include using namespace std;class Clock/声明Clock类 public:Clock(int,int,int);friend void display(Clock,6.1.1 友元 函数,Clock:Clock(int h,int m,int s)/构造函数 hour=h;minute=m;second=s;/这是友元函数,形参t是Clock类对象的引用void display(Clock,6.1 友元函数,程序运行结果如下:10:13:56,【例6-2】友元成
3、员函数。,#include using namespace std;class Date;/对Date类的提前引用声明class Clock/声明Clock类public:Clock(int,int,int);void display(Date,6.1.1 友元 函数,class Date/声明Date类public:Date(int,int,int);friend void Clock:display(Date,6.1.1 友元 函数,Clock:Clock(int h,int m,int s)/Clock类的构造函数 hour=h;minute=m;second=s;void Clock:
4、display(Date,6.1.1 友元 函数,int main()Clock t(10,13,56);/定义Clock类对象t Date d(12,25,2004);/定义Date类对象d/调用t的display函数,实参是Date类对象d t.display(d);return 0;,6.1 友元函数,程序运行结果如下:12/25/200410:13:56,不仅可以将一个函数声明为一个类的“朋友”,而且可以将一个类(例如B类)声明为另一个类(例如A类)的“朋友”。这时B类就是A类的友元类。友元类B中的所有成员函数都是A类的友元函数,可以访问A类中的任何成员。,6.1 封装的破坏友元,6.
5、1.2 友元类,class Student;class Teacherpublic:void assigngrades(Student,6.1.2 友元类,class Studentpublic:friend Teacher;/友元类 protected:int num;string name;float score;,6.1.2 友元类,声明友元类的一般形式为:friend 类名;关于友元,有三点需要说明:(1)友元函数的声明可以出现在类的任何地方(包括在private和public部分),也就是说友元的说明不受成员访问控制符的限制。,6.1.2 友元类,(2)友元关系是单向的而不是双向的,
6、如果声明了B类是A类的友元类,不等于A类是B类的友元类,A类中的成员函数不一定能够访问B类中的成员(3)友元关系是不能传递的,例如,如果B类是A类的友元类,C类是B类的友元类,并不能说C类就是A类的友元类。,在C+中,声明了一个类之后,可以定义该类的多个对象。系统为每个对象分配单独的内存空间。每一个对象都分别有自己的数据成员,不同对象的数据成员各自有其值,互不相干。但是有时我们希望有某一个或几个数据成员为所有对象所共有。这样可以实现数据共享。,6.2 对象机制的破坏 静态成员,我们知道全局变量能够实现数据共享。但是用全局变量的安全性得不到保证,因为在各处都可以自由地修改全局变量的值,很有可能由
7、于某个没注意到的失误,全局变量的值就被修改,导致程序的失败。因此在实际工作中很少使用全局变量。如果想在同类的多个对象之间实现数据共享,也不要用全局对象,可以用静态成员。静态成员包括静态数据成员和静态成员函数。,6.2 对象机制的破坏 静态成员,静态数据成员是一种特殊的数据成员。它以关键字static开头。例如:,6.2 对象机制的破坏 静态成员,6.2.1 静态数据成员,class Studentpublic:Student(char*name=no name);static int stu_count;char name40;,静态数据成员在内存中只占一份空间(而不是每个对象都分别为它保留一
8、份空间),它是属于类的,但它被该类的所有对象所共享,每个对象都可以访问这个静态数据成员。静态数据成员的值对所有对象都是一样的。如果改变它的值,则在各对象中这个数据成员的值都同时改变了。这样可以节约空间,提高效率。,6.2.1 静态数据成员,说明:(1)如果只声明了类而未定义对象,则类的一般数据成员是不占内存空间的,只有在定义对象时,才为对象的数据成员分配空间。但是静态数据成员不属于某一个对象,在为对象所分配的空间中不包括静态数据成员所占的空间。静态数据成员是在所有对象之外单独开辟空间。只要在类中定义了静态数据成员,即使不定义对象,也为静态数据成员分配空间,它可以被访问。在一个类中可以有一个或多
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 面向对象的妥协 程序设计 面向 对象 妥协
![提示](https://www.31ppt.com/images/bang_tan.gif)
链接地址:https://www.31ppt.com/p-6503605.html