C++中的friend函数详细解析
friend
是C++语言中的一个关键字,用于在一个类中声明其它类或者函数成为友元,可以让友元类或者友元函数能够访问本类的私有成员。friend
也是一个强大的功能,但是使用不当可能打破了类的封装性。
基本语法
在C++中,使用friend
关键字声明一个友元类或者友元函数,例如:
class MyClass{
private:
int x;
public:
friend void friendFunction(MyClass obj); //声明友元函数
friend class FriendClass; //声明友元类
};
使用friend
关键字声明的类或者函数,在访问MyClass的私有成员时,不再受到访问限制。
友元函数
友元函数是一个非成员函数,但可以访问定义类的非公有成员。下面是一个简单的示例:
#include<iostream>
using namespace std;
class Box{
private:
double length;
public:
Box(double len){
cout<<"构造函数调用"<<endl;
length = len;
}
double getVolume(void){
return length * length * length;
}
friend void printVolume(Box box);
};
void printVolume(Box box){
cout<<"Box 的容积是:"<<box.getVolume()<<endl;
}
int main(){
Box box(3.0);
printVolume(box);
return 0;
}
这个例子中,Box类有私有成员length和一个公有函数getVolume,友元函数printVolume调用了函数getVolume。
友元类
被声明为友元的类,可以访问另一个类的所有成员。下面是一个示例:
#include<iostream>
using namespace std;
class Box{
friend class BigBox; //声明BigBox类为Box类的友元
private:
double length;
public:
Box(double len){
cout<<"构造函数调用"<<endl;
length = len;
}
double getVolume(void){
return length * length * length;
}
};
class BigBox{
public:
double getLength(Box box){
return box.length;
}
void setLength(Box& box, double len){
box.length = len;
}
};
int main(){
Box box(3.0);
BigBox bigBox;
cout<<"Box的长度是:"<<bigBox.getLength(box)<<endl;
bigBox.setLength(box, 4.0);
cout<<"Box的长度是:"<<bigBox.getLength(box)<<endl;
return 0;
}
这个例子中,BigBox类被声明为Box类的友元类。因此,BigBox类可以访问Box类的所有成员,包括私有成员length。在main函数中,可以看到BigBox类通过getLength和setLength函数分别获取和修改Box类对象的私有成员length的值。
以上是关于C++中的friend函数的详细解析,友元函数和友元类都是一种强大的工具,但是在使用时需要慎重,避免打破类的封装性。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++中的friend函数详细解析 - Python技术站