【发布时间】:2012-09-08 21:30:00
【问题描述】:
假设我有一个班级:
class foo
{
....
//some constructors here set val=34
....
private:
int val;
int & foo::operator,()
{
return val;
}
};
我希望能够将其用作:
foo bar;
printf(" %d ", bar); //i need to get value of bar.val
//with just using bar itself with
//using an overloading
//but , overloading does not work
//i need to get 34 without using bar.val
//i need this without any getter
//i need val to be private
问题:这种重载可能吗?如果是,怎么做?
我试过了:
int foo::operator int()
{
return val;
}
但它说“可能未在转换函数上指定返回类型”:(
我试过了:
operator int() const { return val; }
转换只能在 printf 和 cout 之外进行。
int e=foo;
printf(" %d ",e); //works
【问题讨论】:
-
operator int()应该可以工作。转换运算符(如果您需要术语)。 -
我收到一个错误:可能未在转换函数上指定返回类型
-
printf 不是类型安全的。更喜欢 cout。
-
@tuğrulbüyükışık,转换运算符没有返回类型。它们通常也应标记为
explicit(至少在 C++11 中)并且是逻辑转换。 -
难道没有空运算符或仅使用类对象名称的东西就足以使用该重载吗?
标签: c++ class operator-overloading