2017-03-25 6 views
0

私は次のコードを持っている:子クラスから親の変数にアクセスするより良い方法はありますか?

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を参照しているので、Ballのメソッド全体でPhysicalObject::を何回か使用することは避けてください。

私がそれらをBallに宣言すれば、例えばBall::massPhysicalObject::massという2つの異なる変数が得られますが、それらを同じにします。

私は、Ball内のPhysicalObjectの変数を指すポインタを使用することを考えました。したがって、より小さな変数名が得られますが、すべての変数を再度宣言したくありません。

答えて

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; 

しかし、あなたがこの質問をして以来、あなたの実際のコードはこのようなソルution - おそらく、異なる検索ルールを持つテンプレートを使用しているためです。

+0

実際には何か不思議なことが起こりました。私が質問をする前に、あなたが提案した最後のオプションを試してみましたが、コンパイラはBallクラスにxまたはyという名前の変数がないと言っていたので、うまくいきませんでした。今私は再びそれを試して、それはうまくいった。助けてくれてありがとう:D – JGabriel

関連する問題