1
class Game {
  class Other {}; // Nested class
  // Automatic type conversion:
  operator Other() const {
    cout << "Game::operator Other()\n";
    return Other();
  }
};    
class Chess : public Game {};
void f(Game::Other) {}
int main()
{
    Chess d;
    f(d);
}    

我正在阅读“thinking in c++”第 14 章——不会自动继承的函数。上面的代码片段是 Eckel 给出的一个例子。埃克尔说:

“由于所有这些关于重写处理对象创建的函数的规则,自动类型转换运算符是继承的,乍一看似乎有点奇怪。但也不是太不合理——如果 Game 中有足够的碎片来制作一个 Other 对象,这些片段仍然存在于从 Game 派生的任何东西中,并且类型转换运算符仍然有效(即使您实际上可能想要重新定义它)。”

我不明白 Eckel 想说什么。谁能更详细地解释一下?

谢谢

4

1 回答 1

4

他是说,与其他类似的事情不同,类型转换运算符由派生类自动继承的。

他关于为什么这种行为是合理的论点是,如果你可以Other从 a 构造一个Game,你也可以Other从任何“是 a”的东西Game(即派生类)构造一个。

于 2013-03-02T17:52:31.020 回答