在一些方法中可能会频繁获取实例的元素,例如
double calculate(){
Test test;
test.get1();
test.get2();
}
这样频繁的调用get方法效率很低,可以使用友元函数来直接调用属性。
友元函数的定义
Test{
friend double calculate(); //友元函数在类内哪里都可以,只是声明
public:
getx();
private:
int x;
}
但还有一些情况,例如不同类中的友元函数
Test1{
friend Test2::calculate();
private:
int x;
}
Test2{
double calculate(){
Test1 t1;
t1.x;
}
}
这样就可以为别的类定义友元函数了.
除此之外还有友元类
友元关系不能被继承,不具有传递性
友元类是单向的,Test1授权给Test2,Test2可以获取Test1元素,但Test1不可以获取Test2元素
Test1{
friend class Test2;
private:
int x;
}
Test2{
public calculate(){
Test1 t1;
t1.x; //可以获取
}
}