如何重载赋值运算符以允许我的 class 等于原始类型,例如 'int'
How do I overload the assignment operator as to allow my class to equal a primitive type such as 'int'
所以我正在尝试做一个简单地重载许多运算符的程序,但出于某种原因,每当我尝试重载赋值运算符时,我都会收到一条错误消息
error: conversion from 'int' to non-scalar type 'Foo' requested
class Foo {
int value;
public:
operator int() const;
Foo& operator=(const int &val) { value = val; return this; }
...
};
int main()
{
Foo a = 8, b = 9;
...
return 0;
}
我也试过没有 operator= 语句和没有 operator int() const;语句,但我似乎无法编译它。
您混淆了赋值和初始化。
Foo f = 1; //initialization
f = 2; //assignment
您还需要创建一个接受 int
的构造函数。
Foo(int i) : value(i) {}
//main
Foo f = 1; //uses constructor
因为它是单参数构造函数(转换构造函数),如果您不希望 int
隐式转换为 Foo
,您应该将构造函数设为 explicit
.
所以我正在尝试做一个简单地重载许多运算符的程序,但出于某种原因,每当我尝试重载赋值运算符时,我都会收到一条错误消息
error: conversion from 'int' to non-scalar type 'Foo' requested
class Foo {
int value;
public:
operator int() const;
Foo& operator=(const int &val) { value = val; return this; }
...
};
int main()
{
Foo a = 8, b = 9;
...
return 0;
}
我也试过没有 operator= 语句和没有 operator int() const;语句,但我似乎无法编译它。
您混淆了赋值和初始化。
Foo f = 1; //initialization
f = 2; //assignment
您还需要创建一个接受 int
的构造函数。
Foo(int i) : value(i) {}
//main
Foo f = 1; //uses constructor
因为它是单参数构造函数(转换构造函数),如果您不希望 int
隐式转换为 Foo
,您应该将构造函数设为 explicit
.