You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何继承类无法访问父类私有变量?以BoxClass与Bullet类为例

为什么继承后无法访问BoxClass的ySize变量?

这是C++封装机制里的常见坑——父类的**私有成员(private)**是完全被封装在类内部的,不管子类用哪种继承方式(public/protected/private),都没办法直接访问这些私有成员。你虽然让Bullet类继承了BoxClass,但ySize是BoxClass的私有成员,所以Bullet的成员函数自然识别不了它。

解决办法有两种,根据你的需求选择:

  • 方案1:把ySize的访问权限改成protected
    protected权限的成员可以被子类直接访问,同时还能保持对外的封装性(类外部的代码依然不能访问它)。修改BoxClass.h里的变量声明:

    protected:
        int ySize; // 将原来的private替换为protected
    
  • 方案2:给BoxClass添加getter(或getter+setter)方法
    如果不想改变ySize的封装级别,就在BoxClass里提供公共的访问接口,让子类通过方法间接获取/修改ySize。比如在BoxClass.h中添加:

    public:
        // 只读访问的getter
        int getYSize() const { return ySize; }
        // 如果需要修改ySize,再加setter
        void setYSize(int newSize) { ySize = newSize; }
    

    然后在Bullet.cpp里这样调用:

    void Bullet::Bullet_Draw_Collision() {
        int currentYSize = getYSize();
        // 用currentYSize做后续逻辑...
    }
    

简单总结下:C++的private是“类私有”,不是“子类私有”,protected才是专门给子类开放的访问权限,public则是对外公开的。

内容的提问来源于stack exchange,提问作者Zack Oliver

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:35:06