java友元函数_在C++中关于友元函数的进一步理解

这里重新将类的成员函数的定义看一下:

百科上的认识:

类的成员函数的原型要写在类体中,原型说明了函数的参数表和返回值类型。而函数的定义一般在类外面,也可以直接在类内部定义。前者与普通函数不同的是,实现成员函数时要指明类的名称,具体形式为:

返回值类型 类名 :函数成员名(参数表){函数体};

而后者一般为一些短小的函数(5行以内),也就是内联函数。

这里在百科上对友元函数的解释:

友元函数是指某些虽然不是类成员却能够访问类的所有成员的函数。类授予它的友元特别的访问权。通常同一个开发者会出于技术和非技术的原因,控制类的友元和成员函数(否则当你想更新你的类时,还要征得其它部分的拥有者的同意)。

1.为什么要使用友元函数

优点:能够提高效率,表达简单、清晰。

也有缺点:破坏了程序的封装性。有时候不到万不得已的时候才使用。

代码解释:

#include

#include

using namespace std;

class ca {

string id;

void setId(string s) {

id = s;

}

protected:

string name;

void setName(string s) {

name = s;

}

public:

void print() {

cout << id << " " << name << " " << endl;

}

friend void fun(ca& a); //申明全局函数作友元,允许它访问私有保护成员

};

class derive : public ca { }; //ca类的派生类

void fun(ca& a) { //作友元的函数要定义在那个类的后面

a.id = "987"; //这是ca类的私有成员

a.setName("xyz"); //这是ca类的保护成员

}

int main ( )

{

ca a;

//a.fun(...); //友元函数不是当前类的成员函数,所以这句编译出错

fun(a);

a.print();

derive d;

fun(d); //作参数时,类型转换为ca类

d.print();

return 0;

}

运行结果:

987  xyz

987  xyz

在就是友元函数的位置:可以在类外或者类内

声明方式:friend+普通函数声明

实现方式:像普通函数那样直接调用

还有一点的是:其实一些操作符的重载实现也是要在类外实现的,那么通常这样的话,声明为类的友元是必须滴。(这就像我学的那个坐标类,直接用操作符重载,声明友元函数)

最后一个知识点:

友元函数和类的成员函数的区别:

1.成员函数有this指针,而友元函数没有this指针。

2.友元函数是不能被继承的,就像父亲的朋友未必是儿子的朋友。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。如果你想了解更多相关内容请查看下面相关链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值