关于C++:为什么我不能使用继承类访问私有变量?

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() {

};


您必须设置BoxClassprotectedpublic的成员才能访问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);
}