第2章类与对象3讲述.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* 建议学生不要随便使用,或者根本就不要用 * 相当于是在类内定义的全局函数。 * 编程测试char*的用法。 * 编程测试char*的用法。 * 编程测试char*的用法。 * 编程测试char*的用法。 * 编程测试char*的用法。 * 编程测试char*的用法。 * 编程测试char*的用法。 * * void main( void ) { CSample *p = new CSample; FriendFunc(p, 3); cout i= p-MemberFunc(); delete p; //释放指针p } 将当前操作的对象作为 参数传递给友元函数 例题2.18 * * 友元函数的特点: 第一、友元函数可以直接访问该类的所有成员,但它不是该类的成员函数,可以像普通函数一样在任何地方调用。 第二、友元函数不属于任何类,因此可以放在类说明的任何位置,既可以在public区,也可以在private区。 第三、友元函数不需要通过对象或对象指针来调用,可以直接调用即可。 2.7 友元函数 * * Cpoint类 class Cpoint { public: Cpoint(int a,int b) { x=a; y=b; } void Show() { cout (x,y)endl; } friend void juli(Cpoint p1,Cpoint p2) { int x1,y1,s; x1=p1.x-p2.x; y1=p1.y-p2.y; s=sqrt(x1*x1+y1*y1); cout两个点的距离是:sendl; } private: int x; int y; }; * * Cpoint类 void main() { Cpoint d1(4,5),d2(6,9); juli(d1,d2); } * * 在类中可把另一个类声明为友元类, 如类B是类A的友元类,则类B中的所有成员函数都是类A的友元函数,都可以访问类A的私有和保护成员。 友元类的声明语句如下: class B; // 前向引用声明 class A { …… friend class B; // B为A的友元类 …… } 2.7 友元函数 2.7.2 友元类 * * 例子2-19 #include iostream #include cstring using namespace std; class A { private: friend class B; char *name; int age; public: A(char *str,int n) { name=new char[strlen(str)+1]; strcpy(name,str); age=n; } }; * * class B { public: void show(A x) { cout姓名:x.nameendl; cout年龄:x.ageendl; } }; int main() { A a(左立,19); B b; b.show(a); return 0; } 例子2-19 * * 前向引用声明指类A在引用未定义的类B之前,将类B的名字告诉编译器,使编译器知道那是一个类名。这样当在程序中使用这个名字的时候,编译器就可以正确识别了。 而类B的完整定义可以放在程序的其他地方。 2.7 友元函数 2.7.2 友元类 * * 例2-20 例2.20 编写一个有关栈结构的程序,要求实现入栈和出栈。其中有两个类, 1 3 2 头指针 栈顶 栈底 指向下一结点的指针 CNode结点 CStack栈 CStack栈类要使用CNode结点的内容。 * * 例2-20 一个是结点类CNode,拥有结点值和指向下一结点的指针; 另一个是栈类CStack,它拥有栈的头指针。 由此生成的链式结构如图2.3所示。 2 1 3 头指针 栈顶 栈底 指向下一结点的指针 * * 例2-20 Class CStack; //定义栈节点类CNode class CNode { public: //构造函数 CNode( int iData, CNode *preNode ) { m_iData = iData; m_preNode = preNode; } //将CStack类声明为友元类,则CStack类的所有成员函数都成为本类的友元函

文档评论(0)

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

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

1亿VIP精品文档

相关文档