欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 养生 > C++ 友元

C++ 友元

2025/8/21 10:02:03 来源:https://blog.csdn.net/ha0ha0xuexi/article/details/148775252  浏览:    关键词:C++ 友元

友元(friend)机制允许某些函数或类访问另一个类的私有(private)和保护(protected)成员。友元不是类的成员,但可以像成员一样访问类的私有数据。友元分为三种常见形式:全局函数做友元、友元类、成员函数做友元。

1. 全局函数做友元

• 在类内用friend声明某个全局函数为友元,该函数可以访问类的私有和保护成员。

示例:

class Box {
private:int length;
public:Box(int l) : length(l) {}friend void printLength(const Box& b); // 声明全局函数为友元
};void printLength(const Box& b) {std::cout << b.length << std::endl; // 可以访问私有成员
}

2. 友元类

• 在类内用friend class 类名;声明另一个类为友元类,该类的所有成员函数都可以访问本类的私有和保护成员。

示例:

class Engine; // 前向声明class Car {
private:int speed;
public:Car(int s) : speed(s) {}friend class Engine; // Engine是Car的友元类
};class Engine {
public:void showSpeed(const Car& c) {std::cout << c.speed << std::endl; // 可以访问Car的私有成员}
};

3. 成员函数做友元

• 可以只将另一个类的某个成员函数声明为友元,而不是整个类。

示例:

class Car; // 前向声明class Engine {
public:void showSpeed(const Car& c);
};class Car {
private:int speed;
public:Car(int s) : speed(s) {}friend void Engine::showSpeed(const Car& c); // 只授权Engine的showSpeed为友元
};void Engine::showSpeed(const Car& c) {std::cout << c.speed << std::endl; // 可以访问Car的私有成员
}

总结

• 友元机制打破了类的封装性,应谨慎使用,只在确有需要时开放接口。
• 友元关系是单向的、不可传递的。
• 友元可以是全局函数、类、或成员函数,灵活控制访问权限。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com