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 回答