2

重複の可能性:
実装ファイルでクラス名を繰り返さないようにすることはできますか?

私は c++ の (再) 学習に取り組んでいますが、c++ オブジェクト指向プログラミングの理解に問題があります。私は最近 Java での作業に多くの時間を費やしましたが、おそらくそれが私を怠け者にさせましたが、ここに私が抱えている問題があります。

これは、私が作業している完全ではないコードです。

class Pong{
    public:
        Pong();
        void run();


    private:
        //Class to represent a pong ball
        class Ball{
            public:
                Ball();
                int getVector();
            private:
                int xvel,yvel;
        };

        //Class to represent a pong paddle
        class Paddle{
            public:
            private:
        };

        bool init();
        //The ball and player paddles
        Ball ball;
        Paddle p1;
        Paddle p2;
};
//Ball members
Pong::Ball::Ball(){

}
//Paddle members
Pong::Paddle::Paddle(){

}

//Pong members
Pong::Pong() : ball(Ball()),p1(Paddle()),p2(Paddle()){
    ball = Ball();
    p1 = Paddle();
    p2 = Paddle();
}
bool Pong::init(){
    if(!log("Starting pong...")){return 2;}
    return 0;
}
void Pong::run(){
    if(Pong::init() != 0){log("Failed to initialize Pong!");}
    return;
}

ここで私が抱えている問題は、読みやすさに関するものです。たとえば、Pong::Ball::Ball() のようなものを指定する必要なく、メンバーとネストされたメンバー メンバーを定義する見栄えの悪い方法があるかどうか疑問に思っています。IE はすべてのメンバーの前に名前空間を配置します。

ここで何か間違ったことをしていますか?すべてのメンバーがクラス自体の内部で定義されているJavaから来ると、これは本当に...クラス定義の外側ですべて(ネストされたクラスメソッドを含む)を定義することは、おそらく私には粗雑に思えます。それは機能しますが、それを行うためのより良い方法があるように感じずにはいられませんが、私が使用しているリソース (cprogramming.com) は、これが必要な方法であると述べています.

(編集: 誰かが私を捕まえる直前に、Pong コンストラクター内の重複した定義を削除できることを知っています。まだ行っていません...)

4

1 に答える 1

3

すべてのメンバーがクラス自体の内部で定義されているJavaから来ると、これは本当に...クラス定義の外側ですべて(ネストされたクラスメソッドを含む)を定義するのは、おそらく私には粗雑に思えます。

それは問題ではありません。C++ は非常に優れているため、クラス定義の内部と外部の両方でメソッドを定義できます。

定義を外部に保持したい場合は、いいえ、資格を減らす方法はありません。

あなたが間違っているかもしれないと思うので、私は次のことを指摘しているだけです:

Pong::Pong() : ball(Ball()),p1(Paddle()),p2(Paddle()){
    ball = Ball();
    p1 = Paddle();
    p2 = Paddle();
}

する必要があります

Pong::Pong(){
}

つまり、明示的な初期化は必要ありません。

于 2012-10-04T14:24:10.047 に答える