当前位置: 首页 > news >正文

C++中static与private继承关系解析

1. static 成员与继承

  • 静态成员属于类本身,而非类的实例。
  • 子类不会继承父类的静态成员,但可以通过父类的作用域访问它们。
  • 静态成员不参与多态,无法通过子类覆盖(override)。
示例:
#include<iostream>

using namespace std;


class Parent {
public:
    static int staticVar;
    static void staticMethod() { cout<<"#################\n"<<endl; }
};

class Child : public Parent { 
    // Child 不继承 staticVar 和 staticMethod,但可以直接访问它们
};

int Parent::staticVar = 42;

int main() {
    cout<<"1count():"<<Parent::staticVar<<endl;
    cout<<"1count():"<<Child::staticVar<<endl;
    Child::staticVar = 10;        // 通过子类访问父类静态成员
    cout<<"2count():"<<Parent::staticVar<<endl;
    cout<<"2count():"<<Child::staticVar<<endl;
    Child::staticMethod();       // 通过子类调用父类静态方法
    Parent::staticMethod();      // 直接调用父类静态方法
    Parent::staticVar = 20;      // 直接通过父类访问
    cout<<"3count():"<<Parent::staticVar<<endl;
    cout<<"3count():"<<Child::staticVar<<endl;
}

2. private 成员与继承

  • 子类无法直接访问父类的 private 成员(无论继承方式如何)。
  • 父类的 private 成员仍会存在于子类对象中,但只能通过父类的公有或保护方法间接访问。
示例:
#include<iostream>

using namespace std;


class Parent {
private:
    int privateVar;
protected:
    int protectedVar1;
public:
    int protectedVar;
    void setPrivate(int v) { privateVar = v; } // 间接修改父类 private 成员
};

class Child : public Parent {
public:
    void modify() {
        // privateVar = 10;      // 错误:无法直接访问父类 private 成员
        protectedVar = 20;       // 允许访问父类 protected 成员
        cout<<"&&2 :"<<Childer.protectedVar<<endl;
        setPrivate(30);          // 通过父类公有方法间接修改 private 成员
    }
};

int main() {

    Child Childer;

    cout<<"&&1 :"<<Childer.protectedVar<<endl;

    Childer.modify();
    
    cout<<"&&2 :"<<Childer.protectedVar<<endl;
}

3. static + private 的交互

  • 如果父类的静态成员是 private,子类无法直接访问它,必须通过父类的公有/保护接口。
示例:
class Parent {
private:
    static int privateStaticVar;
public:
    static int publicStaticVar;
    static int getPrivateStatic() { return privateStaticVar; }
};

class Child : public Parent {
public:
    void test() {
        // int a = privateStaticVar;  // 错误:无法访问父类 private 静态成员
        int b = publicStaticVar;      // 允许访问父类 public 静态成员
        int c = getPrivateStatic();   // 通过父类接口间接访问
    }
};
http://www.dtcms.com/a/123315.html

相关文章:

  • Soybean Admin 使用tv-focusable兼容电视TV端支持遥控器移动焦点
  • 智能体代理模式(Agent Agentic Patterns)深度解析
  • C盘清理技巧分享
  • 期权与期货的在险价值
  • SmolDocling:一种超紧凑的视觉语言模型,用于端到端多模态文档转换
  • SpringBoot接口覆盖上一次调用的实现方案
  • kafka生产者partition数量和消费者数量的关系
  • APIGen-MT:高效生成多轮人机交互Agent数据的两阶段框架
  • VCode 的 .S 汇编文件里面的注释不显示绿色
  • [数据结构]排序
  • 深度剖析丝杆升降机的蜗杆精度要求等级​
  • 【Pandas】pandas DataFrame to_numpy
  • 微店商品属性参数接口
  • 百度地图小区边界爬取
  • 从PPT到PNG:Python实现的高效PPT转图工具
  • Edge浏览器IE兼容模式设置
  • JavaScript(JS进阶)
  • 【AI论文】OmniSVG:一种统一的(可扩展)矢量图形生成模型
  • STM32单片机入门学习——第31节: [10-1] I2C通信协议
  • 需求开发与需求管理的全景解析
  • 4.10学习总结
  • MQTT:基于Keil开发工具移植入MQTTClient-C开源库
  • JS—同源策略:2分钟掌握同源策略
  • vue2添加背景水印-手动实现(无组件模式)
  • 4月10(信息差)
  • linux系统下如何提交git和调试
  • +++++背到厌倦。持续更新
  • python基础语法:缩进规则
  • netty中的ChannelPipeline详解
  • 认知风险→风险转移→保障未来