为何继承类无法访问父类私有变量?以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
相关产品推荐
相关产品推荐

