解决友元类(friend class)无法继承的问题

简介:

解决友元类(friend class)无法继承的问题

 

友元声明friend class是无法继承的。举例说明:class A声明class B为其友元类,也就是说class A授予class B访问class A的所有包括私有成员在内的所有成员。如果class C 继承class B.那么class C是不具备这种特权的。

 

 

但是如果我想在class C中访问class A的某个私有或者保护成员函数怎么办?

我们可以把工作交给父类。

 

#include <iostream> using namespace std; class B; class A { friend B; public: A(){}; ~A(){} protected: void Operation(){ cout << "Hello, I am here." << endl; } private: }; class B { public: B(){}; ~B(){}; virtual void Operate() { a.Operation(); } private: A a; }; class C: public B { public: C(){} ~C(){} private: }; int main(void) { C c; c.B::Operate();//这里显示的调用父类的函数 }

目录
相关文章
|
程序员 API 数据库
【Cmake工程 库相关教程 】深入理解CMake工程C/C++ 库管理技巧
【Cmake工程 库相关教程 】深入理解CMake工程C/C++ 库管理技巧
269 1
|
存储 安全 编译器
【C++ 17 新功能 std::visit 】深入解析 C++17 中的 std::visit:从原理到实践
【C++ 17 新功能 std::visit 】深入解析 C++17 中的 std::visit:从原理到实践
1113 1
|
安全 程序员 编译器
【C/C++ 泛型编程 进阶篇 Type traits 】C++类型特征探究:编译时类型判断的艺术
【C/C++ 泛型编程 进阶篇 Type traits 】C++类型特征探究:编译时类型判断的艺术
903 1
|
6月前
|
监控 Ubuntu Linux
Windows11 WSL2 Ubuntu编译安装perf工具
通过以上步骤,你已经在Windows 11的WSL2中成功编译并安装了 `perf`工具。尽管在WSL2中可能会遇到一些限制,但大部分基本性能分析功能应当可以正常使用。使用 `perf`进行性能分析,可以帮助你更好地理解和优化系统及应用程序的性能。
449 14
|
11月前
|
开发框架 JavaScript 前端开发
Electron 重大更新,33.0.0版本发布,带来多项新特性与改进!
本文介绍了 Electron 33.0.0 版本的重要更新,包括核心组件的升级(Chromium、Node.js 和 V8),新增功能(如 app.setClientCertRequestPasswordHandler 和 View.setBorderRadius),重要改进和主要问题修复。建议开发者尽快升级,以享受更强大的性能和功能。
536 0
Electron 重大更新,33.0.0版本发布,带来多项新特性与改进!
|
安全 算法 程序员
【C++智能指针 空指针判断】深入探索C++智能指针:nullptr与empty的微妙差异
【C++智能指针 空指针判断】深入探索C++智能指针:nullptr与empty的微妙差异
529 1
|
存储 安全
atomic_int
atomic_int
548 0
|
开发者
迭代器(Iterator)遍历的两种方法(for和while)
迭代器(Iterator)遍历的两种方法(for和while)
189 0
|
Dart Android开发 iOS开发
flutter 创建项目、运行项目、项目目录
flutter 创建项目、运行项目、项目目录
447 0
|
JavaScript 前端开发 测试技术
JavaScript中的switch-case:与if-else比较
【4月更文挑战第7天】探索JavaScript中的switch-case语句,用于多分支选择,替代嵌套if-else。理解其概念、应用及与if-else的区别。示例展示如何根据数字显示星期和处理不同事件。注意使用break避免意外穿透,利用const或let声明局部变量。在适当场景下,switch-case提供更清晰的代码结构,但面对复杂逻辑,if-else可能是更好的选择。了解这些,能提升代码编写效率和可读性。
635 0