这种在 C++ 中实现方法的方式是什么?
Whats this way of implementing a method in c++?
我想使用 C++ SFML 库创建游戏 class。
我尝试使用 OOP 编码风格,但我对在我的学习书中找到的一段代码感到困惑,它是这样的:
#include <SFML/Graphics.hpp>
class Game
{
public:
Game();
void run();
private:
void proccessEvent();
void update();
void render();
private:
sf::RenderWindow mWindow;
sf::RectangleShape rect;
};
Game::Game()
: mWindow(sf::VideoMode(640, 480), "SFML Application") , rect()
{
rect.setSize(sf::Vector2<float>(100.0f,100.0f));
rect.setFillColor(sf::Color::Red);
}
我不明白 Game::Game 部分发生了什么。有人可以向我解释一下那部分的 : 是什么吗??
它被称为成员初始化列表。参见:https://en.cppreference.com/w/cpp/language/constructor
默认情况下,类 的数据成员在对象本身之前被初始化。可以这样定义相同的构造函数实现:
Game::Game()
{
mWindow = RenderWindow(sf::VideoMode(640, 480), "SFML Application");
rect = RectangleShape();
rect.setSize(sf::Vector2<float>(100.0f,100.0f));
rect.setFillColor(sf::Color::Red);
}
但是这次,mWindow
和 rect
将首先使用它们的默认构造函数进行初始化,然后在构建游戏对象期间调用它们的复制赋值运算符来分配它们的值。
如果你使用成员初始化列表,他们的构造函数被调用一次。这样会更有效。
我想使用 C++ SFML 库创建游戏 class。 我尝试使用 OOP 编码风格,但我对在我的学习书中找到的一段代码感到困惑,它是这样的:
#include <SFML/Graphics.hpp>
class Game
{
public:
Game();
void run();
private:
void proccessEvent();
void update();
void render();
private:
sf::RenderWindow mWindow;
sf::RectangleShape rect;
};
Game::Game()
: mWindow(sf::VideoMode(640, 480), "SFML Application") , rect()
{
rect.setSize(sf::Vector2<float>(100.0f,100.0f));
rect.setFillColor(sf::Color::Red);
}
我不明白 Game::Game 部分发生了什么。有人可以向我解释一下那部分的 : 是什么吗??
它被称为成员初始化列表。参见:https://en.cppreference.com/w/cpp/language/constructor
默认情况下,类 的数据成员在对象本身之前被初始化。可以这样定义相同的构造函数实现:
Game::Game()
{
mWindow = RenderWindow(sf::VideoMode(640, 480), "SFML Application");
rect = RectangleShape();
rect.setSize(sf::Vector2<float>(100.0f,100.0f));
rect.setFillColor(sf::Color::Red);
}
但是这次,mWindow
和 rect
将首先使用它们的默认构造函数进行初始化,然后在构建游戏对象期间调用它们的复制赋值运算符来分配它们的值。
如果你使用成员初始化列表,他们的构造函数被调用一次。这样会更有效。