我参加了C ++课程,但我遇到了问题。我们必须创建一个银行账户列表,每个账户都有自己的储蓄和支票账户。我走得很远,但现在我必须使用" ofstream& FOUT"打印一个想象帐户的支票和储蓄。
我的头文件" Account.h"看起来像这样(我认为这是正确的):
#include <iostream>
#include <cmath>
#include <fstream>
#ifndef ACCOUNT_H
#define ACCOUNT_H
using namespace std;
class Account{
protected:
string number;
double balance;
public:
Account(){}
Account(string nr, double bl);
void deposit(double am);
string get_number();
double get_balance();
double withdraw(double am);
bool equals(Account other);
virtual void print();
void println();
void println(string s);
virtual void println(ofstream& fout);
virtual void read(ifstream& fin);
};
#endif
我的定义文件是fstream部分出现严重错误的地方:
#include "Account.h"
Account::Account(string nr, double bl){
if (bl >= 0){
number = nr;
balance = bl;
}
else{
number = "incorrect";
}
}
void Account::deposit(double am){
if (am >= 0){
balance = balance + am;
}
}
string Account::get_number(){
return number;
}
double Account::get_balance(){
return balance;
}
double Account::withdraw(double am){
if (0 <= am && am <= get_balance()){
balance = balance - am;
return am;
}
else{
return 0;
}
}
bool Account::equals(Account other){
if (number == other.get_number()){
return true;
}
return false;
}
void Account::print(){
cout << "<Account(" << number << ",";
cout << balance << ")>" ;
}
void Account::println(){
print();
cout << endl;
}
void Account::println(string s){
cout << s;
println();
}
void Account::println(ofstream& fout){
fout << number << ",";
fout << balance;
fout << endl;
}
void Account::read(ifstream& fin){
fin >> number;
}
虚假账号:: println(ofstream&amp; fout)的声明有问题。它给了我输出
<Account(number,balance,0)>
而不是
<Account(number,balance)>
为什么会这样?打印储蓄和检查号码时我遇到了很多问题,但我觉得如果我理解为什么会这样,我可以解决这些问题。感谢任何想要帮助我的人。
答案 0 :(得分:0)
Account::println(ofstream&)
将打印“”,但由于余额为双倍,因此会打印小数位:
如果balance == 0.0,它将打印为eiter 0.0或0,0,具体取决于您的语言环境。
无论哪种方式,你都有太多的打印方法,我认为解决方案应该通过输出操作符来实现:
部首:
class Account {
// ....
// no print methods defined
};
std::ostream& operator <<(std::ostream& out, const Account& a);
来源: 的std :: ostream的和放;运算符&lt;&lt;(std :: ostream&amp; out,const Account&amp; a) { 退出&lt;&lt; “”; }
客户代码:
#include <iostream> // console
#include <fstream> // file
Account a;
// print to console
std::cout << a << std::endl;
// print to file
std::ofstream fout("./account.txt");
fout << a << std::endl;