Возможный дубликат:
Можно ли избежать повторения имени класса в файле реализации?
Я работал над попыткой (пере) изучения 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. Просто я еще не …)
Исходя из Java, где все члены определены внутри самого класса, мне кажется, что это действительно … грубо для меня, возможно, определить все (включая методы вложенного класса) вне определения класса.
Это не проблема. C ++ настолько хорош, что позволяет вам определять методы как внутри и снаружи определения класса.
Если вы хотите оставить определение вне, нет, нет способа снизить квалификацию.
Я только указываю на следующее, потому что думаю, что вы можете ошибаться:
Pong::Pong() : ball(Ball()),p1(Paddle()),p2(Paddle()){
ball = Ball();
p1 = Paddle();
p2 = Paddle();
}
должно быть
Pong::Pong(){
}
то есть — не нужно любой явная инициализация.
Других решений пока нет …