Why can't I access the private variables using an inheriting class?
本问题已经有最佳答案,请猛点这里访问。
我正试图继承某个类的一些私有成员。我不会放任何其他cpp文件或.h文件,因为这只涉及boxclass.h、bullet.h和bullet.cpp。在"bullet::bullet_draw_collision()"的bullet.cpp中,程序没有从"boxclass.h"中识别"ysize"。我把"boxClass"类继承到"bullet"类。程序为什么不识别这个变量呢?谢谢!
编辑:为了简化我的问题,为什么我不能继承ysize变量。
BoxClass:H:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | #ifndef BOXCLASS_H #define BOXCLASS_H class BoxClass { //prv variables unsigned short int width, retrieveX; int height, i, xSize, ySize, rightWall; float space_Value, height_Count; bool error; int width_Var, height_Var, position_Var; int speed_Var = 1; unsigned short int horizontalCount = 0, verticleCount = 0; public: int Retrieve_X(); void Print_Rectangle_Moving(int x, int y, int horizontalSpaces, int verticleSpaces); void Print_Solid_Rectangle(); void Rectangle_Movement(int speed); //function shows area of individual spaces float Rectangle_Area(); // constructor BoxClass(int x, int y); }; #endif |
子弹:
1 2 3 4 5 6 7 8 9 10 11 12 13 | #ifndef BULLET_H #define BULLET_H class Bullet: private BoxClass{ public: void Bullet_Draw_Collision(); //constructor Bullet(); }; #endif |
Bullet.cpp:
1 2 3 4 5 6 7 8 9 | #include"BoxClass.h" void Bullet::Bullet_Draw_Collision() { ySize; } Bullet::Bullet() { }; |
您必须设置
BoxClass
1 2 3 4 5 | class BoxClass { protected: // or public, consider var access when designing the class int ySize; }; |
子弹H
1 2 3 4 5 | class Bullet: private BoxClass // or protected or public { public: void Bullet_Draw_Collision(); }; |
公报
1 2 3 4 5 6 7 8 9 | void Bullet::Bullet_Draw_Collision() { // do whatever you need with inherited member vars ySize; } Bullet::Bullet() { }; |
您可以使用这些选项中的任何一个。
选项1:
1 2 3 4 5 | class BoxClass { protected: int ySize; }; |
选项2:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | class BoxClass { private: int ySize; protected: //properties void set_ysize(int y); int get_ysize() const; }; void Bullet::Bullet_Draw_Collision() { set_ysize(10); } |