c++中友元函数理解与使用。
来源:互联网 发布:美颜软件电脑版 编辑:程序博客网 时间:2024/06/08 16:26
在学习c++这一块,关于友元函数和友元类,感觉还是不好理解,但是井下心来,理解,需要把我一下几点。
首先讲友元函数。
(1)友元函数:
1)C++中引入友元函数,是为在该类中提供一个对外(除了他自己意外)访问的窗口;2)这个友元函数他不属于该类的成员函数,他是定义在类外的普通函数,只是在类中声明该函数可以直接访问类中的private或者protected成员。
使用友元函数声明的一般形式:
friend <返回类型> <函数名> (<参数列表>);
使用友元函数注意的要点:
- 类中通过使用关键字friend 来修饰友元函数,但该函数并不是类的成员函数,其声明可以放在类的私有部分,也可放在共有部分。友元函数的定义在类体外实现,不需要加类限定。
- 一个类中的成员函数可以是另外一个类的友元函数,而且一个函数可以是多个类友元函数。
- 友元函数可以访问类中的私有成员和其他数据,但是访问不可直接使用数据成员,需要通过对对象进行引用。
- 友元函数在调用上同一般函数一样,不必通过对对象进行引用。
例如如下形式:这里解释上面的1,3,4要点的使用,加以理解。
#include <iostream>#include <cstring>using namespace std;class persion{public: persion(char *pn); //友元函数; friend void setweigth(persion &p,int h);//注意,参数列表中一般会有一个引用类型的形参,原因参考上面的使用要点3和4; void disp(); //类成员函数private: char name[20]; int weigth,age; };persion::persion(char *pn) //构造函数{ strcpy(name,pn); weigth=0;}void persion::disp(){cout<<name<<"--"<<weigth<<endl;}//友元函数的具体实现:这里没有类限定例如 (perion::setweigth)这种形式,这里可以与上面的disp()做个对比,一个属于类的成员,有限定,不属于类的成员函数,没有加限定。void setweigth(persion &pn,int w){strcpy(pn.name,pn);//实现字符串复制pn.weigth=w; //私有成员数据赋值}void main(){ persion p("zhansan"); //调用实现setweigth(),与一般函数调用一致。 setweigth(p,60); p.disp(); //调用类的成员函数。}
关于要点2的使用,我给出一段代码案例:
#include <iostream>#include <cstring>using namespace std;class wheel;class car{public: car(char *pn); void run(wheel &w); //成员函数,做成wheel类中友元函数实现private: char name[20];};car::car(char *pn){strcpy(name,pn);}class wheel{public: wheel(int s); friend void car::run(wheel &w); //这里把car类的成员函数做了友元函数。private: int speed;};wheel::wheel(int s){ speed=s;}int main(int argc, char const *argv[]){ wheel w(60); car c("New car"); c.run(w); return 0;}void car::run(wheel &w) //car类成员函数的实现{ cout<<"the car is running"<<endl; cout<<"name: "<<name<<" speed :"<<w.speed<<endl;}
0 0
- c语言函数指针的理解与使用
- c语言函数指针的理解与使用
- c语言函数指针的理解与使用
- c语言函数指针的理解与使用
- c语言函数指针的理解与使用
- c语言函数指针的理解与使用
- c语言函数指针的理解与使用
- c语言函数指针的理解与使用
- c语言函数指针的理解与使用
- c++中友元函数理解与使用。
- 理解extern "C",C++函数与C函数互调
- javascript callback函数的理解与使用
- javascript callback函数的理解与使用
- javascript callback函数的理解与使用
- 【C/C++】链表的理解与使用
- 【C/C++】链表的理解与使用
- C常用函数理解与识记 第二季
- 读《C缺陷与陷阱》之-函数声明理解
- 从一个示例学习ER Studio8.0基本使用
- android textview 垂直滚动and水平跑马灯
- C# 文件路径 Path类 测试
- tomcat 同时启动多个web应用
- JS中的事件委托机制
- c++中友元函数理解与使用。
- source insight语法修饰( syntax decorations)
- linux下redis集群配置与设置密码
- C语言里用结构体和指针函数实现面向对象思想
- Mysql的三种分页方法
- js小技巧(自己遇到的一些技巧)
- React-Native工程项目打包编译发布过程详解
- spring mvc发送邮件
- 如何看待代码中滥用HashMap?-知乎问题读后感和相关研究