继承的'Get'函数不会返回正确的值

时间:2013-11-12 04:55:17

标签: c++ visual-c++ inheritance

我有一个基类BankAccount,然后是3个派生类:SavingsAccount,CheckingAccount和AchieverAccount(也继承检查)。唯一的get_函数在基类public中。当我从3个派生类中调用它时,它返回0,我假设是基类的构造函数正在做的。我用this-> balance()创建了getBalance函数;作为一个测试,看它是否会恢复平衡,没有运气,我把它作为回报平衡;在手之前。我试图公开平衡,尽管这不是一个好主意,但仍然没有。所以必须是SavingsAccount没有正确地继承它,或者getBalance没有得到正确的平衡,我需要帮助。

我不打算包含所有代码,因为事实证明它很多,但我会把它认为是重要的,如果你想我可以把它全部放进去。这仅适用于SavingsAccount,因为我认为如果我得到这方面的帮助,我可以在其他地方找到它。

所有这些都有#include并使用namespace std;


BankAccount.h


class BankAccount{
public: 
    BankAccount();
    BankAccount(double amount);
    double getBalance();
};
private:
    double balance;

BankAccount.cpp


#include "BankAccount.h"
BankAccount::BankAccount(){
    balance = 0;
}

BankAccount::BankAccount(double amount){
    balance = amount;
}

double BankAccount::getBalance(){
    return this->balance;
}

SavingsAccount.h


#include "BankAccount.h"
class SavingsAccount: virtual public BankAccount{
public:
    SavingsAccount();
    SavingsAccount(double amount);

private:   
    double balance;
};

SavingsAccount.cpp


#include "SavingsAccount.h"
SavingsAccount::SavingsAccount(){
    balance = 0.00;
}

SavingsAccount::SavingsAccount(double amount){  
    balance = amount;
    interest = .09;
}

Main.cpp的


#include "SavingsAccount.h"
#include "BankAccount.h"
void main(){
    cout << "Creating new SavingsAccount with $2000.00" << endl;
    SavingsAccount sa(2000.00);

cout << "Current balance: $" << sa.getBalance() << endl;
}

输出


使用$ 2000.00创建新的SavingsAccount 当前余额:0.00美元

按任意键继续。 。

3 个答案:

答案 0 :(得分:3)

BankAccount类很可能有一个名为balance的成员(由于某种原因未在代码中显示) - 否则BankAccount(double)构造函数将无法编译。

SavingsAccount类还有一个名为balance的成员。意识到SavingsAccount::balanceBankAccount::balance不同且与SavingsAccount无关。 BankAccount::getBalance的构造函数初始化前者,而class BankAccount { double balance; public: BankAccount(double value) : balance(value) {} double getBalance() const { return balance; } }; class SavingsAccount : public BankAccount { public: SavingsAccount(double value) : BankAccount(value) {} }; 则返回后者的值。

你可能正在寻找这样的东西:

{{1}}

我建议你阅读你最喜欢的C ++教科书中的构造函数初始化列表。

答案 1 :(得分:1)

我没有看到为基类声明的平衡变量,但你引用它..这是如何工作的?我假设你有一个,只是没有在这里复制..

然而,问题是您的储蓄账户声明了一个余额,它将被设置为2000.但是您的父类中定义的getBalance无法看到该值并返回0.

答案 2 :(得分:1)

您想为每个帐户设置一个储蓄变量吗?在这种情况下,您不应重新定义派生类中的节省。您正在调用基类中的get并返回0。