从第15项开始,我注意到这些代码:
class FontHandle { ... };
class Font {
public:
// implicit conversion function
operator FontHandle() const { return f; }
private:
FontHandle f;
};
似乎类Font
重载了其他类的构造函数,是吗?我们通常会看到+-*/=
重载定义,为什么会发生这种情况?我们应该采取哪种情况?
答案 0 :(得分:3)
operator FontHandle() const { return f; }
这是转化运营商。它允许您使用Font
对象,其中要求FontHandle
。在这种情况下,实现只返回私有FontHandle
f
。
此示例中的const
告诉编译器这不会修改Font
对象,因此可以与const
Font
个对象一起使用。
答案 1 :(得分:3)
这是一个用户定义的转换运算符。
它允许从Font
到FontHandle
的隐式转换。也就是说,它允许这样的代码:
Font f;
// ...
FontHandle fh = f; // Conversion applied here
如果没有这样的运算符,上面的行会产生一个编译器错误:“无法在不相关的类型之间进行转换”
答案 2 :(得分:0)
const
标记“this”指针常量,也就是说,不允许该方法改变对象的不变量。这样做的“副作用”是你可以在const对象上调用这个方法,因为它可以保证它“不会乱用数据成员”。
(如您的评论中所述,该调用是隐式转换。)