有没有更好的方法可以从子类访问父类的变量?

Is there a better way to access parent's variables from a child class?

本文关键字:访问 父类 变量 子类 更好 方法 有没有      更新时间:2023-10-16

我有以下代码:

class PhysicalObject {
public:
    double x, y, mass, airrescons, volume;
    bool grav, airres, buoy;
    Vector2d velocity;
    // ...
    // Here I define some physics methods
    // ...
}
class Ball : public PhysicalObject {
    double radius;
public:
    Ball() {
        PhysicalObject::x = 0;
        PhysicalObject::y = 0;
        radius = 1;
        PhysicalObject::mass = 1;
        PhysicalObject::grav = true;
        PhysicalObject::airres = true;
        PhysicalObject::buoy = true;
        PhysicalObject::airrescons = circcons*airden*PI*radius/mass;
        PhysicalObject::volume = PI*radius*radius;
        PhysicalObject::velocity = Vector2d();
    };
    // ...
    // More physics methods defined here
    // ...
}

由于我想将这些变量保留在类PhysicalObject,因为它具有使用它们的泛型方法和子类,我想知道是否有办法将这些变量导入子类,例如 Ball ,并告诉程序,例如,每次我在 Ball 的作用域使用变量mass时,我指的是PhysicalObject::mass, 这样我就可以避免在鲍尔的方法中多次使用PhysicalObject::

如果我在 Ball 声明它们,我会得到两个不同的变量,例如Ball::massPhysicalObject::mass,但我希望它们是相同的。

我想过使用指向 Ball 内部 PhysicalObject 变量的指针,所以我得到了更小的变量名称,但我不想再次声明所有变量。

你可以这样做:

class Ball : public PhysicalObject {
public:
    Ball() {
        this->x = 0;
        this->y = 0;

或者这个:

class Ball : public PhysicalObject {
public:
    using PhysicalObject::x;
    using PhysicalObject::y;
    Ball() {
        x = 0;
        y = 0;

在您发布的具体示例中,不涉及模板,您甚至不需要执行using

class Ball : public PhysicalObject {
public:
    Ball() {
        x = 0;
        y = 0;

但是既然你问了这个问题,我假设你的真实代码不适用于这样的解决方案——也许是因为它使用了具有不同查找规则的模板。