友元函数可访问类的私有成员,通过在类内用friend声明,如void showSecret(const MyClass& obj)能直接读取MyClass的private数据secret。

在C++中,friend关键字允许一个函数或类访问另一个类的私有(private)和保护(protected)成员。这打破了封装性的一部分,但在某些场景下非常实用。合理使用friend可以提升代码的灵活性和效率。
友元函数不是类的成员函数,但它被声明为类的朋友,因此能直接访问该类的私有和保护成员。
声明方式是在类内部使用friend关键字修饰函数原型。
例如:
class MyClass {
private:
int secret;
public:
MyClass(int s) : secret(s) {}
// 声明友元函数
friend void showSecret(const MyClass& obj);
};
// 友元函数定义
void showSecret(const MyClass& obj) {
std::cout << "Secret value: " << obj.secret << std::endl; // 直接访问私有成员
}
注意:友元函数定义时不需要加作用域限定符(如MyClass::),因为它不属于类的成员。
立即学习“C++免费学习笔记(深入)”;
常用于运算符重载,尤其是需要对称操作的二元运算符。
比如重载
class Point {
private:
int x, y;
public:
Point(int x, int y) : x(x), y(y) {}
friend std::ostream& operator<<(std::ostream& os, const Point& p);
};
std::ostream& operator<<(std::ostream& os, const Point& p) {
os << "(" << p.x << ", " << p.y << ")";
return os;
}
这样就可以直接使用
std::cout << point_obj;
如果一个类被声明为另一个类的友元,则它可以访问那个类的所有私有和保护成员。
声明方式是在类内使用friend class 类名;
示例:
class SecretKeeper {
private:
std::string password = "12345";
int code = 999;
friend class Inspector; // Inspector是友元类
};
class Inspector {
public:
void inspect(const SecretKeeper& sk) {
std::cout << "Password: " << sk.password << ", Code: " << sk.code << std::endl;
}
};
此时Inspector类中的任何成员函数都能访问SecretKeeper的私有成员。
虽然友元提供了便利,但应谨慎使用,避免破坏封装原则。
基本上就这些。友元机制是C++提供的一种特殊访问权限控制手段,在设计工具类、调试辅助类或实现特定运算符时很有用。掌握其语法和适用边界,能让代码更清晰高效。不复杂但容易忽略细节。
以上就是c++++中如何使用friend关键字_友元函数与友元类应用解析的详细内容,更多请关注php中文网其它相关文章!
c++怎么学习?c++怎么入门?c++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号