一个更好/更整洁/更可读的方式来定义类(和嵌套类)成员函数?

时间:2012-10-04 14:22:35

标签: c++ class function nested member

  

可能重复:
  Is it possible to avoid repeating the class name in the implementation file?

我一直在努力(重新)学习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将命名空间放在每个成员的前面。 / p>

我在这里做错了吗?来自java,其中所有成员都是在类本身内部定义的,这似乎对我来说很粗糙,也许是在类定义之外定义所有内容(包括嵌套类方法)。它有效,但我不禁感觉有更好的方法,但我一直在使用的资源(cprogramming.com)说这是它需要完成的方式。

(编辑:就在有人抓住我之前,我知道我可以删除Pong构造函数中的重复定义。我还没有......)

1 个答案:

答案 0 :(得分:3)

  

来自java,其中所有成员都在类本身内部定义,对我而言,这似乎真的很粗略地定义了类定义之外的所有内容(包括嵌套类方法)。

这不是问题。 C ++非常棒,它允许您定义类定义的内部和外部方法。

如果你想把定义保留在外面,不,那就没有办法降低资格。

我只是指出了以下内容,因为我认为你可能错了:

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

应该是

Pong::Pong(){
}

即。 - 无需任何显式初始化。