SlE*_*Es5 5 c++ xcode constructor
首先,如果答案显而易见,我想提前道歉; 我是C++的新手,我的第一语言是Java.我也是Stack Overflow的新手,所以如果我的问题有问题或者您需要其他任何内容,请告诉我.
所以.我在这里有这段代码:(我使用SFML作为向量和CircleShape)
Ball::Ball() {
// This ugly thing calls the full constructor with a random x and y position
// in such a way the the entire ball is inside the screen.
Ball::Ball((rand() % (WINDOW_X - (2 * BALL_RADIUS))) + BALL_RADIUS, (rand() % (WINDOW_Y - (2 * BALL_RADIUS))) + BALL_RADIUS);
}
Ball::Ball(float x, float y) {
loc.x = x;
loc.y = y;
ball.setPosition(loc.x - BALL_RADIUS, loc.y - BALL_RADIUS);
ball.setRadius(BALL_RADIUS);
ball.setFillColor(sf::Color::Red);
ball.setOutlineColor(sf::Color::Black);
ball.setOutlineThickness(1);
}
Run Code Online (Sandbox Code Playgroud)
这是标题(#included到上面的文件中):
class Ball {
private:
sf::CircleShape ball;
sf::Vector2f loc;
sf::Vector2f vel;
sf::Vector2f acc;
void update();
void bounce();
void draw();
public:
Ball();
Ball(float x, float y);
void run();
};
Run Code Online (Sandbox Code Playgroud)
当我用球创造球时
Ball ball;
Run Code Online (Sandbox Code Playgroud)
(是的,所有的SFML渲染内容都有效),它从未显示过.一些调查表明它的loc.x和loc.y变量没有设置,可能也没有球对象的radius,fillcolor等.如果我打印的这些值与性病::法院内部构造,loc.x和loc.y和所有其它的设置,所以我认为他们的构造后拿到的地方未设置.奇怪的是,如果我用球创造球
Ball ball((rand() % (WINDOW_X - (2 * BALL_RADIUS))) + BALL_RADIUS, (rand() % (WINDOW_Y - (2 * BALL_RADIUS))) + BALL_RADIUS);
Run Code Online (Sandbox Code Playgroud)
甚至
Ball ball(400, 300);
Run Code Online (Sandbox Code Playgroud)
一切都很完美,球出现在屏幕上.我真的很难过.如果有人能帮助我,那就太好了.
顺便说一下,我使用Xcode 4.5.2运行OS X 10.8,并使用SFML RC2.0,如果这有任何区别.
谢谢,
马特
在C++ 11之前,从另一个构造函数(称为委托构造函数)调用构造函数是不可能的.要在C++ 11中执行此操作,您需要使用成员初始化列表:
Ball::Ball()
: Ball((rand() % (WINDOW_X - (2 * BALL_RADIUS))) + BALL_RADIUS,
(rand() % (WINDOW_Y - (2 * BALL_RADIUS))) + BALL_RADIUS)
{ }
Run Code Online (Sandbox Code Playgroud)
在Pre-C++ 11中,您可以创建另一个执行常见工作的函数,并让两个构造函数都可以调用它.
Ball::Ball() {
init((rand() % (WINDOW_X - (2 * BALL_RADIUS))) + BALL_RADIUS,
(rand() % (WINDOW_Y - (2 * BALL_RADIUS))) + BALL_RADIUS);
}
Ball::Ball(float x, float y) {
init(x, y);
}
void Ball::init(float x, float y) {
loc.x = x;
loc.y = y;
ball.setPosition(loc.x - BALL_RADIUS, loc.y - BALL_RADIUS);
ball.setRadius(BALL_RADIUS);
ball.setFillColor(sf::Color::Red);
ball.setOutlineColor(sf::Color::Black);
ball.setOutlineThickness(1);
}
Run Code Online (Sandbox Code Playgroud)
C++ 11 之前的 C++ 不支持构造函数链接
您可以将逻辑传递给函数并从两个构造函数中调用它。就像是:
Ball::Ball() {
// This ugly thing calls the full constructor with a random x and y position
// in such a way the the entire ball is inside the screen.
init((rand() % (WINDOW_X - (2 * BALL_RADIUS))) + BALL_RADIUS, (rand() % (WINDOW_Y - (2 * BALL_RADIUS))) + BALL_RADIUS);
}
Ball::Ball(float x, float y) {
init(x,y);
}
Ball::init(float x, float y) {
loc.x = x;
loc.y = y;
ball.setPosition(loc.x - BALL_RADIUS, loc.y - BALL_RADIUS);
ball.setRadius(BALL_RADIUS);
ball.setFillColor(sf::Color::Red);
ball.setOutlineColor(sf::Color::Black);
ball.setOutlineThickness(1);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
435 次 |
| 最近记录: |