0

从第 15 条,我注意到这些代码:

class FontHandle { ... };

class Font {
public:
  // implicit conversion function
  operator FontHandle() const { return f; }
private:
  FontHandle f;
};

看起来那个类Font重载了其他类的构造函数,是吗?我们通常会看到+-*/=重载定义,但是为什么会发生这种情况?我们应该在哪些情况下这样做?

4

3 回答 3

3
operator FontHandle() const { return f; }

这是一个转换运算符。它将允许您使用需要 a 的Font对象FontHandle。在这种情况下,实现只返回 private 的副本FontHandle f

const例中的 告诉编译器这不会修改Font对象,因此可以与const Font对象一起使用。

于 2013-10-29T18:36:41.800 回答
3

这是一个用户定义的转换运算符。

它允许从到的隐式转换。也就是说,它允许这样的代码:FontFontHandle

Font f;
// ...
FontHandle fh = f;  // Conversion applied here

如果没有这样的运算符,上面的行将产生一个编译器错误,类似于“不相关的类型之间不可能进行转换”

于 2013-10-29T18:37:18.313 回答
0

const出现在函数名之后标记“this”指针常量,即不允许该方法改变对象的不变量。这样做的“副作用”是您可以在 const 对象上调用此方法,因为可以保证它“不会摆弄数据成员”。

(如您的评论中所述,该调用是隐式转换。)

于 2013-10-29T18:32:40.040 回答