覆盖原始数据类型的转换
Overriding conversion of primitive data types
在下面的代码中,我试图重载 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;
}
但是编译时报错:
error: ‘int operator=(int&, Data*)’ must be a
nonstatic member function int operator=(int &lhs, Data* rhs){
test1.cpp: In function ‘int main()’:
test1.cpp: error: invalid
conversion from ‘Data*’ to
‘int’ [-fpermissive] int A = &d;
请建议我重载运算符的正确方法。
您不能重载对 int
的赋值。正如编译器告诉您的那样,operator=
必须是 class 的非静态成员函数,故事结束。
您已经在 class 中转换为 int
,因此您可以编写 int A = d;
。
您的 class 中不需要赋值运算符 (operator=
) 重载。而且,它不能有两个参数。
您所需要的只是转换运算符(您的 operator int() {return a;}
)和一个适当的赋值,例如 int A = d;
。当您在 d
之前写 &
时,如果 int
足够宽以在您的系统上存储指针,则将 d
的地址放入 A
。
在下面的代码中,我试图重载 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;
}
但是编译时报错:
error: ‘int operator=(int&, Data*)’ must be a nonstatic member function int operator=(int &lhs, Data* rhs){
test1.cpp: In function ‘int main()’:
test1.cpp: error: invalid conversion from ‘Data*’ to ‘int’ [-fpermissive] int A = &d;
请建议我重载运算符的正确方法。
您不能重载对 int
的赋值。正如编译器告诉您的那样,operator=
必须是 class 的非静态成员函数,故事结束。
您已经在 class 中转换为 int
,因此您可以编写 int A = d;
。
您的 class 中不需要赋值运算符 (operator=
) 重载。而且,它不能有两个参数。
您所需要的只是转换运算符(您的 operator int() {return a;}
)和一个适当的赋值,例如 int A = d;
。当您在 d
之前写 &
时,如果 int
足够宽以在您的系统上存储指针,则将 d
的地址放入 A
。