【问题标题】:Inherited 'Get' function will not return correct value继承的“Get”函数不会返回正确的值
【发布时间】:2013-11-12 04:55:16
【问题描述】:

我有一个基类 BankAccount,然后是 3 个派生类:SavingsAccount、CheckingAccount 和 AchieverAccount(也继承检查)。唯一的 get_ 函数位于 public 基类中。当我从 3 个派生类调用它时,它返回 0,我认为这是基类的构造函数正在做的事情。我使用 this->balance(); 创建了 getBalance 函数;作为一个测试,看看它是否会返回余额,没有运气,我把它当作只是返回余额;之前。我试图将平衡公之于众,即使这不是一个好主意而且仍然一无所获。所以肯定是 SavingsAccount 没有正确继承它,或者 getBalance 没有得到正确的余额,我需要帮助。

我不会包含所有的代码,因为结果会很多,但我会把它放在我认为重要的地方,如果你愿意,我可以把它全部放进去。这仅适用于 SavingsAccount,因为我认为如果我得到这方面的帮助,我可以在其他地方解决。

所有这些都有#include 和 using 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 美元

按任意键继续。 . .

【问题讨论】:

  • 可能这不是您的全部代码,因为您使用balance 作为BankAccount 中的成员变量,但它不在您显示的类定义中。为什么你实际上从BankAccount 继承,为什么SavingsAccount 中有另一个balance 成员?
  • 我相信我想通了。我使基类成员受保护,并删除了余额的 SavingsAccount 初始化,它似乎可以工作。
  • 没关系。

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


【解决方案1】:

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) {}
};

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

【讨论】:

  • 听起来不错。那么我从那里去哪里呢?我必须通过参考发送 SavingsAccount 的余额吗?还是有更简单的方法?
  • 这取决于您想要达到的目标,而您从未解释过。话虽如此,我在答案中添加了一个简单的示例。希望这会有所帮助。
  • 我知道我还没有学到一些基本知识。谢谢,这几乎清除了它,我很感激。
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2016-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-15
      • 1970-01-01
      • 1970-01-01
      • 2021-09-26
      相关资源
      最近更新 更多