- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
[医学]第04讲类与对象
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 友元函数 友元函数 友元函数是能访问类的所有成员的普通函数,一个函数可以是多个类的友元函数,只需在各个类中分别声明。 友元函数在类内进行声明,但它不是该类的成员函数。 友元函数的定义,可以在类的内部或外部。 在类外定义友元函数时,与普通函数的定义一样,不应在函数名前用类名加以限制,因此,友元函数不象成员函数那样在调用时使用对象名,友元函数要对类的成员进行访问,必须在参数表中显式指明要访问的对象。 类与对象 * 友元函数 友元函数 一个类的友元函数与该类的类内成员函数一样,享有对该类一切成员的访问权。 友元函数的调用与一般函数的调用方式和原理一致。 C++不允许将某个类的构造函数、析构函数和虚函数声明为友元函数。 类与对象 * 友元函数 案例分析:友元函数 友元函数的定义和使用。 类与对象 #include iostream.h class X1 { private: int x; public: X1(int i) { x=i; } int getx(); //声明友元函数 friend void sum(X1 a, X1 b); }; int X1::getx() { return x; } * 友元函数 案例分析:友元函数 续 类与对象 void sum(X1 a, X1 b) { //可以访问类的私有成员 cout用友元函数求和:a.x+b.xendl; } void sum1(X1 a, X1 b) { cout用普通函数调用类公共接口函数求和: a.getx()+b.getx()endl; } void main() { X1 m(1), n(2); sum(m, n); sum1(m, n); } 用友元函数求和:3 用普通函数调用类公共接口函数求和:3 * 友元函数 友元成员函数 可以把另一个类的公有成员函数声明为自己的友元函数。 举例 类与对象 #include iostream using namespace std; class B; //提前引用声明 class A { public: void disp(B b); }; class B { private: int val; public: friend void A::disp(B b); }; void A::disp(B b) { coutB::val=b.valendl; } * 友元类 友元类 友元类是在多个类之间建立一种访问机制,当程序中定义了两个或两个以上的类时,如果类A被说明为类B的友元类,类B的成员就可以被类A的成员访问。 定义友元类的语句格式为: friend class 类名; 其中:friend 和class 是关键字,类名必须是程序中的一个已定义过的类。 类与对象 * 友元类 友元类 当希望一个类可以存取另一个类的私有成员时,可以将该类声明为另一类的友元,友元类的所有成员函数都可视为该类的友元函数,能存取该类的私有成员和保护成员。 将类B声明为类A的友元类的方法是在类A的定义中加上说明: class A { … friend class B; } 注意: 友元关系不具有对称性。 此外,友元关系不具有传递性,如果类B是类A的友元类,类C是类B的友元类,这并不隐含类C是类A的友元类。 类与对象 * 友元类 案例分析:友元类 在类C1的定义中定义友元类C2。 类与对象 #include iostream.h class C1 { private: friend class C2; //定义友元类C2 char *name; int age; public: C1(char *str, int i); }; C1::C1(char *str, int i) { name=str; age=i; } class C2 { public: void show(C1 x); }; void C2::show(C1 x) { cout姓名:x.nameendl; cout年龄:x.ageendl; } void main() { C1 obj1(李小丽,30); C2 obj2; //调用obj2.show,去访问obj1的成员 obj2.show(obj1); } * 小结 面向对象编
文档评论(0)