你能重载对象变量名本身返回的内容吗
Can you overload what the object variable name itself returns?
假设我有一个名为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。
相关文章:
- 你能重载对象变量名本身返回的内容吗
- 使用赋值运算符重载从类中返回jobject
- 为什么将值返回函数传递给重载=运算符对运算符函数有效,而对其他运算符无效
- 重载更少,则运算符返回相反的布尔值
- 使用重载 [] 运算符返回 std::map() 的可赋值
- 为什么重载运算符可以返回其返回类型以外的其他内容?
- 运算符重载C++类中的引用返回
- 如何使用运算符+重载函数正确返回对象?
- 我的运算符重载没有在我的 int main 中返回?
- 字符 * 未从重载运算符或内存管理问题正确返回
- 如何正确返回带有成员变量的重载运算符++?
- 运算符的返回对象 = C++ 中的重载
- 运算符重载是否真的需要返回值C++?
- 函数重载并根据相同的输入返回不同的数据类型
- 两个相同的重载运算符[]一个返回引用
- c++运算符重载-我实际返回的操作数类型是什么
- 将单独的头文件和类定义文件链接到主函数文件 - G++ 返回重载"undefined reference to"构造函数
- 如何返回重载二元运算符的值
- 返回重载运算符的类型 + 表现出奇怪的行为
- GMock -使用ON_CALL返回重载方法的默认值