你能重载对象变量名本身返回的内容吗

Can you overload what the object variable name itself returns?

本文关键字:返回 重载 对象 变量名      更新时间:2023-10-16

假设我有一个名为MyClass的类,然后我从这个类创建了一个对象:

MyClass obj1;

我想做的是使obj1在其自身用于返回某个东西时,例如假设我希望它返回int,那么如果我执行以下操作:

printf("%d", obj1); 

那么printf()应该打印一个int

这可以在C++中完成吗?

大部分时间都可以完成(但printf需要更多的努力(:

class MyObject {
...
operator int() const { // user-defined conversion operator
return /*the value you want to see*/;
}
...

这样,在任何时候将对象传递给接受int而不接受MyObject的函数时,都会调用转换运算符来获取该int。它也会被调用用于像(int)obj这样的显式强制转换。

printf是有问题的,因为它不专门接受int——它接受任何(签名或多或少是int printf(const char *, ...)(。所以你必须把它叫做printf("%dn", (int)obj1);

我建议不要过多地使用printf,因为它是C遗留版本,所以不可能是类型安全的(例如printf("%s", 1)是一个不可避免的崩溃(。例如,使用fmt或iostreams。