我有一个基类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美元
按任意键继续。 。
答案 0 :(得分:3)
BankAccount
类很可能有一个名为balance
的成员(由于某种原因未在代码中显示) - 否则BankAccount(double)
构造函数将无法编译。
SavingsAccount
类还有一个名为balance
的成员。意识到SavingsAccount::balance
与BankAccount::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。