重写基元数据类型的转换

Overriding conversion of primitive data types

本文关键字:转换 数据类型 重写      更新时间:2023-10-16

在下面的代码中,我试图重载int=运算符。这样我就可以在我的程序中支持int A= &d语句。

class Data{
public:
    int a;
    Data(int A): a(A) {}
    operator int()  {return a;}
};
int operator=(int &lhs, Data* rhs){
    lhs = rhs->a;
    return lhs;
}
int main(){
    Data d(10);
    int A = &d;
    return 0;
}

但它给出了编译时错误:

错误:"int运算符=(int&,Data*)"必须是非静态成员函数int运算符=(int&lhs,Data*rhs){
test1.cpp:在函数"int main()"中:
test1.cpp:错误:无效从"数据*"转换为'int'[-fpermission]int A=-d;

请给我建议让操作员超载的正确方法。

不能将赋值重载到int。正如编译器告诉的那样,operator=必须是类的非静态成员函数,故事结束。

在您的类中已经有了到int的转换,所以您可以编写int A = d;

类中不需要赋值运算符(operator=)重载。此外,不能有两个论点。

您所需要的只是转换运算符(您的operator int() {return a;})和像int A = d;这样的适当赋值。当您在d之前写入&时,如果int的宽度足以在系统上存储指针,则将d的地址放入A