class Brass
{
private:
string fullName;
long acctNum;
double balance;
public:
Brass(const string &s = "Nullbody",long an = -1,double bal = 0.0);
void Deposit(double amt);
virtual void Withdraw(double amt);
double Balance() const;
virtual void ViewAcct() const;
virtual ~Brass() {}
};
class BrassPlus:public Brass
{
private:
double maxLoan;
double rate;
double owesBank;
public:
BrassPlus(const string &s = "Nullbody",long an = -1,double bal = 0.0,double m1 = 500,double r = 0.11125);
BrassPlus(const Brass &ba,double m1 = 500,double r = 0.11125);
virtual void ViewAcct() const;
virtual void Withdraw(double amt);
void ResetMax(double m) {maxLoan = m;}
void ResetRate(double r) {rate = r;}
void ResetOwes() {owesBank = 0;}
};
为何基类包含了一个虚析构函数,虽然有时好像并不需要析构函数,如果析构函数不是虚的,则将只有调用对应于指针类型的析构函数,对于此程序,只有Brass的析构函数被调用,即使指针指向的是一个BrassPlus对象。如果析构函数是虚的,将调用相应对象的析构函数,因此,如果指针指向的是BrassPlus对象,将调用BrassPlus的析构函数,然后自动调用基类的析构函数,因此,使用虚析构函数可以确保正确的析构序列被调用,虽然此程序对于这种虚析构函数并不是很重要,因为析构函数没有执行任何操作,然而,如果BrassPlus包含一个执行某些操作的析构函数,则Brass必须有一个虚析构函数,即使该析构函数不执行任何操作。