QT-protected

在 Qt 和 C++ 中,protected 是一个访问控制关键字,用于定义类成员(如变量、方法等)的访问权限。protected 提供了一种介于 publicprivate 之间的访问级别,主要用于继承和派生类的情况。

基本概念

  • public:公有成员,可以被任何外部代码访问。
  • protected:受保护成员,只能被当前类及其派生类访问。
  • private:私有成员,只能被当前类内部的成员函数访问。

protected 的具体含义

  1. 当前类访问protected 成员可以被当前类的成员函数和友元函数访问。
  2. 派生类访问protected 成员可以被派生类(子类)的成员函数和友元函数访问,无论继承方式是 publicprotected 还是 private
  3. 外部访问protected 成员不能被类外部的代码直接访问。

使用场景

  • 继承和封装 :当需要允许派生类访问某些成员,但又不想让外部代码直接访问这些成员时,使用 protected
  • 实现细节隐藏:将类的实现细节隐藏起来,只暴露必要的接口,同时允许派生类访问必要的内部实现。

示例代码

以下是一个简单的示例,展示 protected 的使用:

复制代码
#include <iostream>

class Base {
protected:
   int protectedData;

public:
   Base() : protectedData(10) {}

   void showProtectedData() {
       std::cout << "Protected Data: " << protectedData << std::endl;
   }
};

class Derived : public Base {
public:
   void modifyProtectedData() {
       protectedData = 20; // 派生类可以访问 protected 成员
   }

   void showModifiedData() {
       std::cout << "Modified Protected Data: " << protectedData << std::endl;
   }
};

int main() {
   Base base;
   base.showProtectedData();

   Derived derived;
   derived.modifyProtectedData();
   derived.showModifiedData();

   // base.protectedData = 30; // 错误,外部代码不能直接访问 protected 成员

   return 0;
}

输出结果

复制代码
Protected Data: 10
Modified Protected Data: 20

注意事项

  • 继承方式影响 :不同的继承方式(publicprotectedprivate)会影响 protected 成员在派生类中的访问权限。
  • public 继承:protected 成员在派生类中仍然是 protected
  • protected 继承:protected 成员在派生类中变为 protected
  • private 继承:protected 成员在派生类中变为 private
  • 访问控制 :合理使用 protected 可以提高代码的封装性和可维护性,但过度使用可能会导致代码复杂度增加。

通过 protected 访问控制,可以在继承层次中实现灵活的成员访问策略,既保护了类的内部实现,又允许派生类进行必要的访问和扩展。

相关推荐
Quz4 小时前
QML 拖拽篇:接收拖拽与数据交换
qt
Interview Aid1126 小时前
TikTok OA 四题分享|半小时内 AC,题目基本都是实现题
java·开发语言·算法·面试·职场和发展
CoderIsArt14 小时前
C#中UI 线程与 Dispatcher
开发语言·ui·c#
AI情绪识别开源16 小时前
检信 ALLEMOTION OS 加密打包可执行程序 — 全面测试报告版本: v1.3功能测试 / 性能测试 /
开发语言·数据结构·人工智能·功能测试
「QT(C++)开发工程师」17 小时前
C++ auto 用法详解
开发语言·c++
OPEN-F17 小时前
C++STL教程:容器适配器与实用工具
开发语言·c++
yaoxin52112318 小时前
507. Java 反射 - 在 BeanFactory 中实现依赖注入
java·开发语言
OPEN-F18 小时前
C++模板教程:变参模板、折叠表达式与SFINAE
java·开发语言·c++
有点。18 小时前
C++二叉搜索树进阶
开发语言·c++