如何使用'fout'继承

时间:2014-01-15 13:58:16

标签: c++ inheritance ofstream

我参加了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)>

为什么会这样?打印储蓄和检查号码时我遇到了很多问题,但我觉得如果我理解为什么会这样,我可以解决这些问题。感谢任何想要帮助我的人。

1 个答案:

答案 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;