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 访问控制,可以在继承层次中实现灵活的成员访问策略,既保护了类的内部实现,又允许派生类进行必要的访问和扩展。

相关推荐
blasit1 天前
笔记:Qt C++建立子线程做一个socket TCP常连接通信
c++·qt·tcp/ip
郑州光合科技余经理6 天前
代码展示:PHP搭建海外版外卖系统源码解析
java·开发语言·前端·后端·系统架构·uni-app·php
feifeigo1236 天前
matlab画图工具
开发语言·matlab
dustcell.6 天前
haproxy七层代理
java·开发语言·前端
norlan_jame6 天前
C-PHY与D-PHY差异
c语言·开发语言
多恩Stone6 天前
【C++入门扫盲1】C++ 与 Python:类型、编译器/解释器与 CPU 的关系
开发语言·c++·人工智能·python·算法·3d·aigc
QQ4022054966 天前
Python+django+vue3预制菜半成品配菜平台
开发语言·python·django
遥遥江上月6 天前
Node.js + Stagehand + Python 部署
开发语言·python·node.js
m0_531237176 天前
C语言-数组练习进阶
c语言·开发语言·算法
Railshiqian6 天前
给android源码下的模拟器添加两个后排屏的修改
android·开发语言·javascript