关于C++友元类的实现讲解
什么是友元类
在C++中,我们可以通过友元类实现类与类之间的访问权限互相扩展,允许一个类的非成员函数或其他类的成员函数访问它的私有成员。
友元类是指在一个类中访问另一个类的私有或受保护成员,需要在另一个类的定义中将该类声明为友元类。
实现步骤
1.在目标类中声明友元类
在目标类中声明友元类的方式如下:
friend class ClassName;
2.定义友元类
为了让另一个类成为友元类,我们需要在该类中定义一个友元类。
class ClassName {
// 可以访问目标类的私有成员
friend class TargetClass;
};
3.在友元类中访问目标类的私有成员
现在,在友元类中就可以直接访问目标类的私有成员或受保护成员了。
class ClassName {
friend class TargetClass;
void func(TargetClass& target) {
// 可以访问target的私有成员
cout << target.privateMember << endl;
}
};
示例说明
示例1
class Circle;
class Square {
private:
int side;
public:
Square() {
side = 4;
}
friend class Circle; // 将Circle类声明为友元类
};
class Circle {
private:
int radius;
public:
Circle() {
radius = 3;
}
int get_radius_of_square(Square& s) {
return s.side; // 定义在Circle类中的成员函数可以访问Square类的私有成员
}
};
int main() {
Square square;
Circle circle;
cout << "Radius of circle: " << circle.get_radius_of_square(square) << endl;
return 0;
}
在上面的示例中,我们将Square类声明为Circle类的友元类,这样Circle类的成员函数就可以访问Square的私有成员,通过圆形类的成员函数来获得正方形的边长。
示例2
class TargetClass {
private:
int privateMember = 10;
public:
TargetClass() {
privateMember = 20;
}
friend class ClassName; // 将ClassName类声明为友元类
};
class ClassName {
public:
void func(TargetClass& target) {
// 可以访问target的私有成员
cout << target.privateMember << endl;
}
};
int main() {
TargetClass target;
ClassName className;
className.func(target);
return 0;
}
在上面的示例中,我们将ClassName类声明为TargetClass类的友元类,这样在ClassName类的成员函数中就可以直接访问TargetClass类的私有成员了。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:关于C++友元类的实现讲解 - Python技术站