C++ 如何转换C++;类/结构到基元/不同类型/类/结构?

C++ 如何转换C++;类/结构到基元/不同类型/类/结构?,c++,class,operator-overloading,class-design,C++,Class,Operator Overloading,Class Design,我有以下类CppProperty类,该类保存值: template<typename TT> class CppProperty { TT val; public: CppProperty(void) { } CppProperty(TT aval) : val(aval) { } CppProperty(const CppProperty & rhs) { this->val

我有以下类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);
};
模板
类属性
{
TT-val;
公众:
CppProperty(无效)
{
}
CPPTProperty(增值税):增值税(增值税)
{
}
CppProperty(const CppProperty&rhs)
{
此->val=rhs.val;
}
虚拟财产(无效)
{
}
TT运算符=(TT aval)
{
这->val=aval;
返回此->val;
}
friend TT运算符++(CppProperty和rhs);
friend TT操作员--(CppProperty&rhs);
friend TT运算符++(CppProperty&rhs,int);
friend TT运算符--(CppProperty&rhs,int);
//模板
//friend RR运算符=(RR&lhs,const CppProperty&rhs);
//友元int和运算符=(int和lhs、const和rhs);
//内部重新解释(建筑和rhs);
};
我想做这样的作业:

CppProperty<char> myproperty(10);
myproperty++;
int count = myproperty;
// If not specified, construct with default-constructed type.
CppProperty(TT aval = TT()) : val(aval)
{
}
cpproperty myproperty(10);
myproperty++;
int count=myproperty;

如何做到这一点?我无法重写运算符=。非常感谢您的帮助!谢谢大家!

您需要向类提供
运算符int()
以允许隐式转换为int。

您需要向类提供
运算符int()
以允许隐式转换为int。

您需要一个转换运算符:

operator const TT&(void) const
{
    return val;
}


operator TT&(void)
{
    return val;
}
有一个关于转换运算符的简短教程。简言之,当编译器尝试转换类型时,它将首先查看右侧的运算符,该运算符将把类型转换为所需的类型。我们所做的是说“不管
TT
是什么,这个类都可以转换成它”

如果找不到操作符,则查看左侧是否可以从右侧构造,依此类推。(直到,如果找不到转换,它将发出错误。)


如果像下面这样声明其他构造函数,则可以删除显式定义的默认构造函数:

CppProperty<char> myproperty(10);
myproperty++;
int count = myproperty;
// If not specified, construct with default-constructed type.
CppProperty(TT aval = TT()) : val(aval)
{
}

您需要一个转换运算符:

operator const TT&(void) const
{
    return val;
}


operator TT&(void)
{
    return val;
}
有一个关于转换运算符的简短教程。简言之,当编译器尝试转换类型时,它将首先查看右侧的运算符,该运算符将把类型转换为所需的类型。我们所做的是说“不管
TT
是什么,这个类都可以转换成它”

如果找不到操作符,则查看左侧是否可以从右侧构造,依此类推。(直到,如果找不到转换,它将发出错误。)


如果像下面这样声明其他构造函数,则可以删除显式定义的默认构造函数:

CppProperty<char> myproperty(10);
myproperty++;
int count = myproperty;
// If not specified, construct with default-constructed type.
CppProperty(TT aval = TT()) : val(aval)
{
}

您可以重载类型转换:


您可以重载类型转换:


你好,纳文!谢谢你的快速回复。那么,如何使用运算符转换为不同的类/数据类型呢?嗨,Naveen!谢谢你的快速回复。那么如何使用运算符转换为不同的类/数据类型呢?谢谢GMan!看起来很酷!让我试着过一会儿再打给你;)没问题,请确保您的
常量
位于正确的位置,我在第一篇文章中已将它们向后放置。请您添加一些关于运算符TT&()的说明,好吗?我不知道它是怎么工作的,真的。你是说你以前还是现在都不懂它?我知道转换运算符。但我不认为它可以用于模板。我想我应该总是在运算符中硬编码类名。谢谢GMan!看起来很酷!让我试着过一会儿再打给你;)没问题,请确保您的
常量
位于正确的位置,我在第一篇文章中已将它们向后放置。请您添加一些关于运算符TT&()的说明,好吗?我不知道它是怎么工作的,真的。你是说你以前还是现在都不懂它?我知道转换运算符。但我不认为它可以用于模板。我想我应该总是在运算符中硬编码类名。嗨,shaleo!谢谢你的帮助。我已经用GMan的建议把事情办好了。我现在正在看你的:)嗨,沙莱奥!谢谢你的帮助。我已经用GMan的建议把事情办好了。我现在正在调查你的:)