首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >运算符重载(+)、(++)、([])、(=)和(*)

运算符重载(+)、(++)、([])、(=)和(*)
EN

Stack Overflow用户
提问于 2014-10-17 08:03:47
回答 1查看 234关注 0票数 0

我正在尝试重载类中的一些运算符。

要加载的运算符:(+)、(=)、(++)、(*)和([])

所以基本上我有一个类A和一个数组,我想使用operator []返回vindex

我想使用运算符+来添加相应的数组元素

我试过了,但是我好像错过了什么。

我在main例程中有一个测试用例,每当我运行我的代码时,我都会得到以下错误:

代码语言:javascript
运行
复制
(78): error C2679: binary '=' : no operator found which takes a right-hand operand of type 'int' (or there is no acceptable conversion)


(67): could be 'A &A::operator =(const A &)'


(82): error C2679: binary '=' : no operator found which takes a right-hand (67): could be 'A &A::operator =(const A &)'


(87): warning C4620: no postfix form of 'operator ++' found for type 'A', using prefix form


(6) : see declaration of 'A'

我的代码:

代码语言:javascript
运行
复制
#include <iostream>
using namespace std;
#define NUM  10

class A
{

    int v[NUM];

public:
    A() { }
    A(int x[]) {
        for (int i = 0; i<NUM; i++)
            v[i] = x[i];
    }

    // (1) operator: [ index ], which returns v[index]

    int &operator [](int i)
    {
        return v[i];
    }


    // (2) operator:  +,  which adds the corresponding array elements

    int operator+(const A& b)
    {
        for (int i = 0; i < NUM; i++)
        {
            return v[i] = v[i] + v[i + 1];
        }
    }

    // (3) operator:  *,  which multiplies the corresponding array Elements

    int operator*(const A& b)
    {
        for (int i = 0; i < NUM; i++)
        {
            return v[i] = v[i] * v[i + 1];
        }
    }

    // (4) operator:  ++, which adds each array element by 1

    int operator++()
    {
        for (int i = 0; i < NUM; i++)
        {
            return v[i++];
        }
    }

    // (5) operator:  =, which assigns all the array elements from one object to another

/*  void operator=(const A& b)
    {
    } */


        // a print function to print out all the array elements

        void print();


};

int main()
{

    int x[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
    A b1(x), b2, b3, b4, b5;
    cout << "b1[5]: " << b1[5] << endl;
    b2 = b1;
    cout << "b2:  ";
    b2.print();
    b3 = b1 + b2;
    cout << "b3:  ";
    b3.print();

    b4 = b1*b2;
    cout << "b4:  ";
    b4.print();

    b5 = b4;
    b5++;
    cout << "b5:  ";
    b5.print();

}

我更新了我的代码,现在我只有一个错误(比以前更好):

错误在第76行:'A::A(const A &)‘:无法将参数1从'int 10’转换为'const A &‘

我看到它不能将x从int转换为const A&这是有道理的。那我应该把operator[]改成整型吗?

代码语言:javascript
运行
复制
#include <iostream>
using namespace std;
#define NUM  10

class A
{

    int v[NUM];

public:
    A() {
        for (int i = 0; i < NUM; i++)
            v[i] = 0;
    }

    /* operator ([]) */

    int &operator[](int i)
    {
        return v[i];
    }

    /* operator (+) */

    A operator+(const A& b)
    {
        A result;
        for (int i = 0; i < NUM; i++)
        {
            result.v[i] = v[i] + b.v[i];
        }
    }

    /* operator (*) */

    A operator*(const A& b)
    {
        A result;
        for (int i = 0; i < NUM; i++)
        {
            result.v[i] = v[i] * b.v[i];
        }
    }

    /* operator (=) */

    A operator=(const A& b)
    {
        A result;
        for (int i = 0; i < NUM; i++)
        {
            result.v[i] = b.v[i];
        }
    }

    /* operator (++) */

    A operator++(int)
    {
        A result;
        for (int i = 0; i < NUM; i++)
        {
            result.v[i]++;
        }
    }

        void print();


};

int main()
{

    int x[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
    A b1(x), b2, b3, b4, b5;
    cout << "b1[5]: " << b1[5] << endl;
    b2 = b1;
    cout << "b2:  ";
    b2.print();
    b3 = b1 + b2;
    cout << "b3:  ";
    b3.print();

    b4 = b1*b2;
    cout << "b4:  ";
    b4.print();

    b5 = b4;
    b5++;
    cout << "b5:  ";
    b5.print();

}
EN

回答 1

Stack Overflow用户

发布于 2014-10-17 08:08:59

operator+的返回类型(以及其他一些运算符)和早期的“return”调用是错误的。下面是如何修复它的方法。

代码语言:javascript
运行
复制
A() {
    for (int i = 0; i < NUM; i++) {
        v[i] = 0;
    }
}

A operator+(const A& b) {
    A result;  // result is initialized with 0s.
    for (int i = 0; i < NUM; i++) {
        result.v[i] = v[i] + b.v[i];
    }
    return result;
}

另一种方法是,不更改构造函数:

代码语言:javascript
运行
复制
A operator+(const A& b) {
    A result = *this;
    for (int i = 0; i < NUM; i++) {
        result.v[i] += b.v[i];
    }
    return result;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26415873

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档