本文主要是介绍c++学习:友元关系+有元函数+友元类,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
友元关系
- 友元关系是一种在编程中使用的术语,通常用于描述两个类或函数之间的特殊关系。
- 一个类可以将其他类或者函数声明为“友元”。被声明为友元的类或函数就可以访问该类的私有和保护成员。
作用
- 在这种关系中,一个类或函数允许另一个类或函数访问其私有和保护成员。这种关系并不依赖于继承,而是通过明确的声明来建立。
友元函数示例
有一个类,类中有一个数据成员,外面有两个函数,只想让一个函数可以访问这个数据成员
class MyClass {
private:int value;public:MyClass(int num) : value(num) {}friend void friendFunction(const MyClass& obj);
};void friendFunction(const MyClass& obj) {std::cout << "The value of MyClass is: " << obj.value << std::endl;
}void Function(const MyClass& obj) {std::cout << "The value of MyClass is: " << obj.value << std::endl;
}int main() {MyClass obj(42);friendFunction(obj); // 调用友元函数Function(obj); // 调用错误,不是友元函数return 0;
}
注意:
- 代码解释
- friendFunction是一个友元函数,它被声明为MyClass的友元。
- 友元函数可以直接访问MyClass的私有成员value。
- friendFunction函数在main函数中被调用,并传递了一个MyClass对象作为参数。
- 声明友元函数格式是 friend 函数声明;
- 在类中声明的友元函数中可以调用类中的所有成员
- 友元的正确使用能提高程序的运行效率,但破坏了类的封装性和数据的隐秘性,导致程序可维护性变差,因此一定要谨慎使用
友元类示例
class FriendClass {
public:void showValue(const MyClass& obj) {std::cout << "The value of MyClass is: " << obj.value << std::endl;}
};class MyClass {
private:int value;friend class FriendClass; // 声明FriendClass为友元类public:MyClass(int num) : value(num) {}
};int main() {MyClass obj(42);FriendClass fc;fc.showValue(obj); // 通过友元类调用私有成员return 0;
}
注意:
- 代码解释:
- FriendClass被声明为MyClass的友元类。
- 因此,FriendClass可以访问MyClass的私有成员value。
- FriendClass类中的showValue函数可以访问并输出MyClass对象的value成员变量。
- 在main函数中,我们创建了一个MyClass对象和一个FriendClass对象。
- 然后,通过FriendClass对象调用showValue函数来访问和输出MyClass对象的value成员变量。
- 友元关系不能被继承
- FriendClass可以访问MyClass,但MyClass不可以访问FriendClass
这篇关于c++学习:友元关系+有元函数+友元类的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!