作者:雷神 转载请联系作者 第十天:友元函数和友元类使得程序员在不放弃私有数据安全性的情况下,对特定的函数或类进行访问。 要想通过一个打印函数打印类中的数据成员,要么函数是类中的一个成员,要么是友元函数。注意友元函数不是类成员,而是位于类作用域外的函数。定义友元函数时只需将它的函数原型插入类定义,象声明成员函数一样,再在函数原型前加入关键字friend即可。类本身决定友元的存在。友元函数是非成员函数,所以它无法通过this指针获得一份拷贝,因此必须给友元函数传递一个对象变量,这一点和其他非成员函数是一样的,不同的是友元函数可以访问类的私有数据。 友元函数必须带有某类变量为参数,才能获取对象数据并对其操作。 一个独立的友元函数可以访问多个类的数据,但必须同时为这多个类的友元。//注意:向前引用是类的原型说明。 当一个类需要访问另一个类的某几个或全部私有数据或是私有成员函数时,将其声明为友元类。友元类是一个单独的类它可以访问另一个类中的所有成员。友元类中含有一个成员,它的类型是声明了这个友元类的类。即使一个类不是友元类,它的成员也可能是其它类的对象,但是该类将无法访问其对象成员的私有成员。 //一个例子: #include #include #include class Boyssoftball;//类声明,因为另一个类要引用到它,如友元函数,所以必须先定义。 class Girlssoftball{ char name[25]; int age; float batavg; public: void init(char N[],int A,float B); friend void prdata(const Girlssoftball p1g,const Boyssoftball p1b); }; void Girlssoftball::init(char N[],int A,float B){ strcpy(name,N); age=A; batavg=B; } class Boyssoftball{ char name[25]; int age; float batavg; public: void init(char N[],int A,float B); friend void prdata(const Girlssoftball p1g,const Boyssoftball p1b); }; void Boyssoftball::init(char N[],int A,float B){ strcpy(name,N); age=A; batavg=B; } main() { Girlssoftball *Gplayer[3]; Boyssoftball *Bplayer[3]; for(int i=0;i<3;i++){ Gplayer[i]=new Girlssoftball; Bplayer[i]=new Boyssoftball; } Gplayer[0]->init("stacy",12,1.34); Gplayer[1]->init("suci",13,2.34); Gplayer[2]->init("ketey",12,3.434); Bplayer[0]->init("tom",12,4.434); Bplayer[1]->init("jone",12,5.504); Bplayer[2]->init("hunter",13,6.496); for(int n=0;n<3;n++){ prdata(*Gplayer[n],*Bplayer[n]);} for(int j=0;j<3;j++){ delete Gplayer[j]; delete Bplayer[j]; } return 0; } void prdata(const Girlssoftball p1g,const Boyssoftball p1b){ cout< cout<<"player name:"< cout<<"player age:"< cout<<"player average:"< cout<<"player name:"< cout<<"player age:"< cout<<"player average:"< } |
正在阅读:『21天精通C++』第二周学习笔记(2-2)『21天精通C++』第二周学习笔记(2-2)
2004-02-14 09:34
出处:PConline
责任编辑:zwg
键盘也能翻页,试试“← →”键