为什么我的重载运算符返回零?

时间:2015-11-06 20:31:04

标签: c++ operator-overloading return-value

无论出于何种原因,当我尝试从我的重载函数返回一个值时,它返回零。我刚开始使用重载,所以我对它很新,所以如果这是一个简单的错误,我很抱歉。

这很奇怪,因为当我cout函数中的值时,它会准确显示我想要看到的内容,但是当我返回它时,它仍然返回一个空值,该值为零。

功能如下:

double operator+=(double ls, Account& rs){
    //cout << ls << endl;
    //cout << rs._balance+ ls << endl;
    return ls+=rs._balance;



    //return rs._balance+=ls;
}

这是完整的.cpp文件,包括函数:

#define _CRT_SECURE_NO_WARNINGS
#include <cstring>
#include <iomanip>
#include "Account.h"
using namespace std;
namespace sict{
    Account::Account(){
        _name[0] = 0;
        _balance = 0;
    }

    Account::Account(double balance){
        _name[0] = 0;
        _balance = balance;
    }

    Account::Account(const char name[], double balance){
        strncpy(_name, name, 40);
        _name[40] = 0;
        _balance = balance;
    }

    void Account::display()const{

        for(int x = 0; x < 40; x++){
            if(_name[x] == '\0')
                x = 40;
            else
                cout << _name[x];
        }

    cout << ": $" << setprecision(2) << fixed << _balance;

    }

    Account Account::operator+(Account ls) {

        return ls._balance + _balance;
    }

    double operator+=(double ls, Account& rs){
        //cout << ls << endl;
        //cout << rs._balance+ ls << endl;
        return ls+=rs._balance;



        //return rs._balance+=ls;
    }

    Account Account::operator+=(Account& ls){

        return  _balance+=ls._balance;

    }

    Account::Account(const char name[]){
        strncpy(_name, name, 40);
    }

    char* Account::getName(){

        return _name;
    }

    double Account::getBal(){

        return _balance;
    }

    std::ostream& operator<<(std::ostream& ls, Account& rs){
        rs.display();
        return ls;
    }

    Account& Account::operator=(Account& ls){
        if( !strcmp(ls._name,"") &&ls._balance > 0)
        {
            strcpy(_name, "Saving");
        }

        _balance = ls._balance;
        //strcpy(_name, ls._name);

        return *this;

    }

    char* Account::operator=(char* ls){

        strcpy(_name, ls);

        return _name;

    }


}

这是头文件:

#ifndef SICT_ACCOUNT_H__
#define SICT_ACCOUNT_H__
#include <iostream>
#include <cstring>
#include <iomanip>
namespace sict{
    class Account{
        char _name[41];
        double _balance;
    public:
        Account();
        Account::Account(double balance);
        Account::Account(const char name[], double balance);
        Account::Account(const char name[]);
        Account& operator=(Account& ls);
        Account operator+=(Account& ls);
        char* operator=(char* ls);
        void display()const;
        double getBal();
        char* getName();

        friend double operator+=(double ls, Account& rs);
        Account operator+(Account ls);

    };

    std::ostream& operator<<(std::ostream& ls, Account& rs);
};

#endif

这是主要的:

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

using namespace sict;
using namespace std;

int main()
{
  Account A;
  Account B("Saving", 10000.99);
  Account C("Checking", 100.99);

  double value = 0;

  cout << A << endl << B << endl << C << endl << "--------" << endl;

  A = B + C;
  A = "Joint";

  cout << A << endl << B << endl << C << endl << "--------" << endl;

  A = B += C;

  cout << A << endl << B << endl << C << endl << "--------" << endl;

  value += A;
  value += B;
  value += C;

  cout << "Total balance: " << value << endl;

  return 0;
}

2 个答案:

答案 0 :(得分:2)

为了使其起作用,您需要通过引用捕获左手参数。

double operator+=(double ls, Account& rs)

需要

double operator+=(double& ls, Account& rs)

答案 1 :(得分:2)

对于

value += A;
value += B;
value += C;

要工作,你必须将重载的操作符函数的参数更改为引用。现在,它通过价值传递。该值在函数中被修改,但不会更改调用函数中的值。

而不是

double operator+=(double ls, Account& rs){

使用

double operator+=(double& ls, Account& rs){
                     // ^^