c++ - 如何重载赋值运算符以允许我的类等于原始类型,例如 'int'

标签 c++ operator-overloading operators overloading assignment-operator

所以我正在尝试做一个简单地重载许多运算符的程序,但是出于某种原因,每当我尝试重载赋值运算符时,我都会收到一条错误消息

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,您应该使构造函数 显式

关于c++ - 如何重载赋值运算符以允许我的类等于原始类型,例如 'int',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35679277/

相关文章:

c++ - 通过显式调用构造函数(方法)构造对象

c++ 在运算符重载函数中创建、分配新变量并将其与两个对象进行比较。

c++ - C++ 中带有 cout 运算符问题的 vector

html - Thymeleaf - boolean 运算符

c++ - 实例化点后 ADL 未找到最佳匹配。这是UB吗?

c++ - c++ 标准是否禁止 void main() 原型(prototype)?

php - 3个不同的等于

Lua:获取默认小于数字的函数

c++创建安装程序和句柄提取的*聪明*方法是什么

c++ - 基类和派生类的虚拟插入运算符重载