我有下面的类CppProperty,它保存了值:
template<typename TT>
class CppProperty
{
TT val;
public:
CppProperty(void)
{
}
CppProperty(TT aval) : val(aval)
{
}
CppProperty(const CppProperty & rhs)
{
this->val = rhs.val;
}
virtual ~CppProperty(void)
{
}
TT operator=(TT aval)
{
this->val = aval;
return this->val;
}
friend TT operator++(CppProperty & rhs);
friend TT operator--(CppProperty & rhs);
friend TT operator++(CppProperty & rhs, int);
friend TT operator--(CppProperty & rhs, int);
//template<typename RR>
//friend RR operator=(RR & lhs, const CppProperty & rhs);
//friend int & operator=(int & lhs, const CppProperty & rhs);
//int reinterpret_cast<int>(const CppProperty & rhs);
};我想做这样的任务:
CppProperty<char> myproperty(10);
myproperty++;
int count = myproperty;如何做到这一点?我不能覆盖operator=。任何帮助都是非常感谢的!谢谢!
发布于 2009-11-09 15:15:07
你需要一个转换操作符:
operator const TT&(void) const
{
return val;
}
operator TT&(void)
{
return val;
}这里有一个关于转换运算符here的简短教程。简而言之,当编译器尝试转换类型时,它将首先查看右侧的运算符,以将其转换为所需的类型。我们所做的就是说“无论TT是什么,这个类都可以转换为它”。
如果没有找到运算符,它会查看是否可以从右侧构造左侧,依此类推。(直到,如果找不到转换,它会发出错误。)
如果像这样声明其他构造函数,则可以删除显式定义的默认构造函数:
// If not specified, construct with default-constructed type.
CppProperty(TT aval = TT()) : val(aval)
{
}发布于 2009-11-09 15:14:42
您需要为您的类提供operator int()以允许隐式转换为int。
发布于 2009-11-09 15:16:57
您可以重载类型转换:
http://www.learncpp.com/cpp-tutorial/910-overloading-typecasts/
https://stackoverflow.com/questions/1699532
复制相似问题