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

时间:2017-03-25 03:28:00

标签: c++ class inheritance

我有以下代码:

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类,因为它有泛型方法和使用它们的子类,我想知道是否有办法将这些变量导入子类,如{{1并且,告诉程序,例如,每次我在Ball的范围内使用变量Ball时我都在引用mass,这样我就避免在整个过程中多次使用PhysicalObject::mass Ball的方法。

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

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

1 个答案:

答案 0 :(得分:0)

你可以这样做:

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;

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