从类的QList访问受保护的成员,例如QList <Account *>

时间:2019-09-12 07:22:44

标签: c++ qt inheritance

我正在尝试使用QT框架获取存储在QList中的帐户列表的总余额。

我的问题是,总余额需要从我不允许这样做的类中访问受保护的成员余额。

这个问题来自大学的分配,这个问题已经给了我程序的UML,并且成员变量余额没有getter函数。

我的问题是,有什么方法可以在不使用getter函数的情况下从QList访问平衡

我尝试添加新的类指针类型,尝试直接访问它,并尝试创建一个新类,并使用赋值构造函数分配传递给它的相关类

class AccountList: public QList<Account*>
{
public:
    ~AccountList();
    bool addAccount(Account* a);
    double totalBalance();
    void doInterestCalculations();
    QString toString() const;
    QStringList customersWithHighestPoints() const;

private:
    Account* findAccount() const;

};

class Account
{
public:
    Account(QString cn, QString an, double ir, QString ty);
    Account(const Account & x);
    Account& operator=(const Account& x);
    QString getCustName() const;
    QString getAccNum() const;
    QList<Transaction> getTransaction() const;
    QString toString() const;
    QString getType() const;
    double getInterestRate() const;
    virtual void transaction(double amt0) = 0;
    virtual void calcInterest() = 0;

protected:
    double balance;
    QList<Transaction> transactions;

private:
    QString custName;
    QString accNum;
    double interestRate;
    QString type;
};

double AccountList::totalBalance()
{
    double totalOfBalances = 0;
    for(int i = 0; i < this->size(); i++)
    {
        totalOfBalances+= at(i)->balance;
    }
    return totalOfBalances;
}

在QUAL Creators IDE中,我的错误是“ totalOfBalances + = at(i)-> balance;”上下文中的“ double Account :: balance'受保护”

1 个答案:

答案 0 :(得分:2)

我真的不明白为什么您不能为此protected数据成员添加吸气剂。

但是,如果您真的不想添加它,可以按照 @Botje 的建议进行操作。将AccountList声明为friend中的Account。这样,AccountList将能够访问private的{​​{1}}和protected成员。

如果您不知道该怎么做,请在Account的声明中添加friend class AccountList;(假设Account是已知的,如果不知道,请向前声明)。 / p>