C++ 友元
【摘要】 @TOC 前言在C++编程中,友元(friend)是一种特殊的关系,允许一个类或函数访问另一个类中的私有成员。 一、什么是友元1.友元 的定义:友元在C++中可以被用于类和函数。对于类来说,可以创建一个友元类或友元函数。友元类可以 直接访问其它类的私有成员 ,而友元函数可以访问某一个类的私有成员。2.友元 的声明:在类定义中,可以使用 friend 关键字声明一个类或函数为友元。声明通常放在...
@TOC
前言
在C++编程中,友元(friend)是一种特殊的关系,允许一个类或函数访问另一个类中的私有成员。
一、什么是友元
1.友元 的定义:
友元在C++中可以被用于类和函数。对于类来说,可以创建一个友元类或友元函数。友元类可以 直接访问其它类的私有成员 ,而友元函数可以访问某一个类的私有成员。
2.友元 的声明:
在类定义中,可以使用 friend 关键字声明一个类或函数为友元。声明通常放在类的访问说明符(public、private、protected)之间。
==友元 关系发生在函数与类之间 或者 类与类 之间。==
class MyClass {
private:
int privateData;
public:
friend class FriendClass; // 友元类声明
friend void FriendFunction(); // 友元函数声明
};
二、友元的特性
1.局限性
友元的使用应该谨慎,并且遵循信息隐藏的原则。友元的目的是提供更灵活的访问权限,但也可能破坏封装性和安全性。应该尽量避免滥用友元,只在必要的情况下使用。
2.友元 关系的传递性
友元 关系不能传递,友元 关系 是单向的。 即使一个类 A 是类 B 的友元,类 B 的友元类不会自动成为类 A 的友元。
如果 A 是 B 的友元, B 是 C 的友元,则 C 不是 A 的友元,不可以传递使用。
三、示例代码
- 示例一:
友元函数允许函数访问类中的私有成员。被声明为友元的函数可以直接访问友元类的私有成员。
class Point
{
int a, b; // a,b 是类的私有成员
public:
Point(int a, int b)
{
this->a = a;
this->b = b;
}
friend void fun(Point&p); //声明 友元 函数
};
void fun(Point& p)
{
printf("a = %d, b = %d\n",p.a,p.b); //在 fun 函数内可直接访问 类的私有成员
}
int main(void)
{
Point p(1,2);
fun(p);
return 0;
}
- 示例 二
友元类允许一个类访问另一个类中的私有成员。被声明为友元的类可以直接访问友元类的私有成员。
class name1
{
const char* n;
public:
name1(const char* n)
{
this->n = n;
}
friend class name2; // 声明 友元 类
};
class name2
{
public:
void GetName1(name1& name) // 打印 name1 类的名字
{
printf("name1 ==> %s\n", name.n); // 访问 私有成员
}
};
int main(void)
{
name1 n1("hello");
name2 n2;
n2.GetName1(n1);
return 0;
}
总结
友元是一个强大的特性,但应谨慎使用。正确理解和使用友元关系,可以在需要的时候提供更灵活的访问权限,同时保持良好的封装性和安全性。在设计类和函数时,考虑友元是否需要,并仔细评估其对程序结构的影响。
C++ 友元
【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)