开发者

Inheritance... C++ syntax

I have to make a trivial class that has a few subclasses and one of those subclasses has it's own sublcass.

AccountClass.h

#ifndef Account_h
#define Account_h

class Account{

public:
    //Account(){balance = 0.0;}; Here's where the problem was
    Account(double bal=0.0){ balance = bal;};
    double getBal(){return balance;};

protected:
    double balance;
};
#endif

SavingsAccount.h

#ifndef SavingsAccount_h
#define SavingsAccount_h
#include "AccountClass.h"
class SavingsAccount : public Account{

public:
    //SavingsAccount(); And here
    SavingsAccount(double bal = 0.0, int pct = 0.0){ balance = bal; rate = pct; } : Account(bal);
    void compound(){ balance *= rate; };
    void withdraw(double amt){balance -= amt;};

protected:
    double rate;
};

#endif

CheckingAccount.h

#ifndef CheckingAccount_h
#define CheckingAccount_h
#include "AccountClass.h"
class CheckingAccount : public Account{

public:
    //CheckingAccount(); Here also
    CheckingAccount(double bal = 0.0, double lim = 500.0, double chg = 0.5){ balance = bal; limit = lim; charge = chg;} : Account(bal);
    void cash_check(double amt){ balance -= amt;};

protected:
    double limit;
    double charge;
};

#endif

TimeAccount.h

#ifndef TimeAccount_h
#define TimeAccount_h
#include "SavingsAccount.h"
class TimeAccount : public 开发者_StackOverflow中文版SavingsAccount{

public:
    //TimeAccount(); ;)
    TimeAccount(double bal = 0.0, int pct = 5.0){ balance = bal; rate = pct;} : SavingsAccount(bal,pct);
    void compound(){ funds_avail += (balance * rate); };
    void withdraw(double amt){funds_avail -= amt;};

protected:
    double funds_avail;
};

#endif

I keep getting errors that default constructors are defined as well as all the variables not existing...

Help!

Edit:

Fixed the preprocessor ifndef's

Also, this was solved. Thanks @Coincoin!


You didn't define your default constructors, but they're being called by default when you derive new classes. It looks like TimeAccount will be the culprit of that issue since it uses the default constructor of SavingsAccount. They all however, should be defined and not just declared.


There are multiple errors in the way you defined your constructors.

  • Some of them don't have a body defined
  • The intialisation lists are syntaxicaly not at the right place
  • You try to define two default constructor by using default valued parameters.

The initialisation list goes between the signature and the body.

Like so:

SavingsAccount(double bal = 0.0, int pct = 0.0)
:Account(bal)
{
   balance = bal; rate = pct;
}

Also, you already have a default constructor yet you have parameter list with all parameters with default values, which means you are trying to define two default constructors. You either need to remove the default value for the bal parameter or remove the default constructor and use the entirely default valued constructor as the default constructor.

Like so:

Account(){balance = 0.0;};
Account(double bal){ balance = bal;}

or

Account(double bal=0.0){ balance = bal;}  


These:

SavingsAccount();
CheckingAccount();
TimeAccount();

need to have definitions so:

SavingsAccount(){};
CheckingAccount(){};
TimeAccount(){};

should work


If you have defaults for all the constructor's arguments, how does the compiler know which to call when you write:

TimeAccount t;

You are probably seeing "ambiguous function call" type errors. Also, why is pct an int in TimeAccount()? The default argument is a double and it stores that value into a field of type double.


You need to write default constructors for everything. Plus make sure you obey the rule of three if you need to define copy constructor/destructor/assignment operator.

TimeAccount():
  bal(0),
  pct(5.0)
{
}

TimeAccount(double bal, int pct)
{
  balance = bal; 
  rate = pct;
}
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜