作为成员变量的引用

Reference as member variable

本文关键字:引用 变量 成员      更新时间:2023-10-16

有人能解释一下为什么代码中的类TaxWay不能保存由引用初始化的成员变量Bank ?我应该在代码中做些什么更改以使其正确?当我将成员变量更改为引用Bank&时,它就工作了。我认为同样的情况也应该发生在"非引用变量"上。怎样才能做到呢?

class Bank;
class TaxWay : public Way
{
  public:
    TaxSquare(int, int, Bank&);
    virtual void process();
  private:
    int taxAmount;
    Bank bank;
};
TaxWay::TaxWay(int anID, int amount, Bank& theBank) 
: Way(anID),taxAmount(amount),bank(theBank) 
{
}

我创建了一个对象:

TaxWay TaxWay9(9,150, theBank);

两个重点:

  • 如果要将成员变量声明为Bank bank,则必须包含包含Bank类定义的头文件。

  • 但是,如果您想将其声明为Bank & bankBank *bank,则前向声明就足够了。在这种情况下,不需要定义类Bank,除非您想访问Bank的任何成员(例如,在类TaxWay的某些成员函数的内联定义中)。

一件事(这可能是也可能不是您的问题)是您已经将Bank声明为没有定义的前向声明。当编译器到达TaxWay时,您将无法声明Bank类型的成员变量,因为编译器还不知道Bank类的任何信息。

在这个例子中,TaxWay类不能保存银行的副本,因为您没有定义Bank类。至少要知道Bank类的大小,这样才能分配空间。

另一方面,根据Bank包含的内容,复制它可能不是一个好主意。这也会复制银行里的钱吗?: -)