gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 01:46:12 25 4
gpt4 key购买 nike

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

这很奇怪,因为当我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;
}

最佳答案

为了

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

要工作,您必须将重载运算符函数的参数更改为引用。现在,它是按值传递的。该值在函数中被修改,但不会更改调用函数中的值。

代替

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

使用

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

关于c++ - 为什么我的重载运算符返回零?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33575234/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com