我正在用C ++思考。有一个我不明白的代码片段。 谁能帮我解释一下呢?
class GameBoard {
public:
GameBoard() { cout << "GameBoard()\n"; }
GameBoard(const GameBoard&) {
cout << "GameBoard(const GameBoard&)\n";
}
GameBoard& operator=(const GameBoard&) {
cout << "GameBoard::operator=()\n";
return *this;
}
~GameBoard() { cout << "~GameBoard()\n"; }
};
class Game {
GameBoard gb; // Composition
public:
// Default GameBoard constructor called:
Game() { cout << "Game()\n"; }
// You must explicitly call the GameBoard
// copy-constructor or the default constructor
// is automatically called instead:
Game(const Game& g) : gb(g.gb) {
cout << "Game(const Game&)\n";
}
Game(int) { cout << "Game(int)\n"; }
Game& operator=(const Game& g) {
// You must explicitly call the GameBoard
// assignment operator or no assignment at
// all happens for gb!
gb = g.gb;
cout << "Game::operator=()\n";
return *this;
}
class Other {}; // Nested class
// Automatic type conversion:
operator Other() const {
cout << "Game::operator Other()\n";
return Other();
}
~Game() { cout << "~Game()\n"; }
};
在上面的代码片段中,我不明白:
operator Other() const {
cout << "Game::operator Other()\n";
return Other();
}
我想这个函数定义了一个运算符“Other()
”。返回Other()
是什么意思?
如果Other()
表示类Other的对象,则运算符“Other()
”的返回类型不是类Other
的类型。
答案 0 :(得分:2)
这是一个转化运算符( NOT 一个强制转换运算符)。只要您的代码要求转换到Other
,就会使用该运算符。您的代码可以通过两种方式调用转换。在以下情况下会发生隐式转换:
Game g;
Game::Other o(g); // **implicit conversion** of g to Game::Other
在代码中编写强制转换时会发生显式转换:
Game g;
Game::Other o(static_cast<Game::Other>(g)); // **explicit conversion**
// of g to Game::Other
答案 1 :(得分:0)
这是演员。
当你写(Other)game;
时(即你将游戏投向Other
)。
它将被调用。
答案 2 :(得分:0)
这是一个C ++强制转换运算符。它定义了将对象转换为其他类时会发生什么。