- 1、本文档共64页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
4.4 友元 4.4.2 友元类 如果一个类(如类A)的很多成员函数都需要经常访问另一个类(如类B)的私有成员,可以将类A声明为类B的友元。 若A类为B类的友元类,则A类的所有成员函数都是B类的友元函数,都可以访问B类的私有成员。 声明友元类的语法形式为: Class B { …… friend class A; // 声明A为B的友元类 …… }; 第4章 类与对象 例4.7 友元类的使用 #include iostream using namespace std; class A { private: int x; public: void Display() { cout x endl; } int Getx() { return x; } friend class B; }; 第4章 类与对象 class B { private: A a; public: void Set(int i); void Display(); }; void B::Set(int i) { a.x=i; } void B::Display() { cout a.x endl; } void main() { B b; b.Set(10); b.Display(); } 程序运行结果为: 10 4.4 友元 4.4.2 友元类(续) 注意: 友元关系是单向的:在上面的例子中,B类是A类的友元,所以B类的成员函数可以访问A类的私有成员,但A类不是B类的友元,A类的成员函数不能访问B类的私有成员。 友元关系是不能传递的:既如果A类是B类的友元,B类是C类的友元,并不能推断A类是C类的友元。 第4章 类与对象 返 回 4.5 静态成员 4.5.1 静态数据成员 静态数据成员特点:在每个类中只有一个拷贝,由该类的所有对象共同维护和使用,从而实现了同一类的不同对象之间的数据共享。 静态数据成员的定义格式:在定义类的成员时前面加static static 类型标识符 静态数据成员名; 在类的声明中仅仅对静态数据成员进行引用性说明,必须在文件作用域的某个地方用类名限定进行定义,这时也可以进行初始化,格式如下: 类型标识符 类名::静态数据成员名 = 初始值; 静态数据成员不属于任何一个对象,可以通过类名直接对它进行访问,一般的用法是: 类名::静态数据成员名 第4章 类与对象 例4.8 在CStudent类中添加静态数据成员,保存CStudent类的对象总数。 #include iostream #include string using namespace std; class CStudent { private: int number; char name[10]; static int total; public: CStudent(int xh, char *xm); ~CStudent(); int GetTotal(); int GetNumber(); }; 第4章 类与对象 CStudent::CStudent(int xh, char *xm) { number = xh; strcpy(name, xm); total++; } CStudent::~CStudent() { total--; } int CStudent::GetTotal() { return total; } int CStudent::GetNumber() { return number; } 例4.7 (续) int CStudent::total = 0; void func(); void main() { CStudent s1(10001, AAAAAA ); cout s1.GetNumber() endl; cout s1.GetTotal() endl; CStudent s2(10002, BBBBBB ); cout s2.GetNumber() endl; cout s1.GetTotal() endl; cout s2.GetTotal() endl; func(); cout s1.GetNumber() endl; cout s1.GetTo
文档评论(0)