运算符重载+以便对两个对象求和

时间:2016-12-15 12:04:28

标签: c++ operator-overloading

我是c +的新手,我希望总结两个对象,这要归功于运算符重载,但问题是我的程序在程序运行期间崩溃了,而且我不知道我的问题出在哪里修复以便很好地编译我的代码。

主要

#include <iostream>
#include <string>
#include "Personnage.h"

int main()
{
    Personnage rony(32), marc(20);
    Personnage resultat;

    resultat = rony + marc;


    system("PAUSE");
    return 0;
}

Personnage.h

class Personnage
{
public:
    Personnage();
    Personnage(int force);
private:
    int power;
};
Personnage operator+(Personnage const& first, Personnage const& second);

Personnage.cpp

#include "Personnage.h"
#include <string>

Personnage::Personnage() : power(0)
{

}
Personnage::Personnage(int force) : power(force)
{

}
Personnage operator+(Personnage const& first, Personnage const& second)
{
    Personnage resultat;
    resultat = first + second;

    return resultat;

}

感谢您的帮助!

2 个答案:

答案 0 :(得分:3)

问题在于您的操作员无休止地自行调用。这句话:

resultat = first + second;

...调用你的操作符,然后再次执行该语句,等等。最终你得到一个堆栈溢出。

您的operator+需要决定将两个Personnage加在一起的语义意义。例如

Personnage operator+(Personnage const& first, Personnage const& second)
{
    int total_power = first.power + second.power;
    return Personnage(total_power);
}

要访问私有成员,通常可以在类中将重载的运算符声明为friend

class Personnage
{
public:
    Personnage();
    Personnage(int force);

    friend Personnage operator+(Personnage const& first, Personnage const& second);

private:
    int power;
};

答案 1 :(得分:0)

将其更改为

friend Personnage operator+(Personnage const& first, Personnage const& second)
{
    Personnage resultat;
    resultat.power = first.power + second.power;

    return resultat;

}

friend Personnage operator+(Personnage const& first, Personnage const& second)
{
    Personnage resultat(first.power + second.power);
    return resultat;
}

friend Personnage operator+(Personnage const& first, Personnage const& second)
{
    return (Personnage resultat(first.power + second.power));
}

在.h文件中也声明为friend

所有都是一样的,只是对不同类型的构造函数的不同调用。