为什么我不能使用继承类访问私有变量?

时间:2018-03-26 08:00:45

标签: c++ visual-studio class inheritance visual-c++

我正在尝试继承一个类的私有成员。我不会放任何其他cpp文件或.h文件,因为这应该只涉及BoxClass.h,Bullet.h和Bullet.cpp。在“Bullet :: Bullet_Draw_Collision()”中的bullet.cpp中,程序无法识别“BoxClass.h”中的“ySize”。我继承了“BoxClass”类到“子弹”类。为什么程序不识别这个变量。谢谢!

编辑:为了简化我的问题,为什么我不能继承ySize变量。

BoxClass.h:

#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

Bullet.h:

#ifndef BULLET_H
#define BULLET_H

class Bullet: private BoxClass{

public:
    void Bullet_Draw_Collision();

    //constructor
    Bullet();
};

#endif

Bullet.cpp:

#include "BoxClass.h"

void Bullet::Bullet_Draw_Collision() {
ySize;
}

Bullet::Bullet() {

};

2 个答案:

答案 0 :(得分:2)

必须设置BoxClass protectedpublic的成员才能在Bullet

中访问它们

BoxClass.h

class BoxClass 
{
protected: // or public, consider var access when designing the class
    int ySize;
};

Bullet.h

class Bullet: private BoxClass // or protected or public
{
public:
    void Bullet_Draw_Collision();
};

Bullet.cpp

void Bullet::Bullet_Draw_Collision() 
{
   // do whatever you need with inherited member vars
   ySize;
}

Bullet::Bullet() 
{
};

答案 1 :(得分:1)

您可以使用以下任一选项。

选项1:

 class BoxClass {

  protected:
     int ySize;
};

选项2:

class BoxClass {

  private:
     int ySize;

  protected:
     //properties
     void set_ysize(int y);
     int get_ysize() const;
};

void Bullet::Bullet_Draw_Collision()
{
   set_ysize(10);
}