问题描述:设计一个名为Account的账户类,来建模银行账户。一个账户有账号、余额、年利率和账户创建时间等属性,还有存款和取款函数,具体要求如下:
(1)一个名为id的int型数据成员,表示账户的身份号。
(2)一个名为balance的double型数据成员,表示账面余额。
(3)一个名为annualInterestRate的double型数据成员,表示当前年利率。
(4)id、balance和annualInterestRate的访问器和更改器函数。
(5)一个无参的构造函数,创建一个缺省的账户,其数据域id为0,balance为0,annualInterestRate为0。
(6)一个名为getMonthlyInterestRate()的函数,返回月利率。
(7)一个名为withdraw(amount)的函数,从账户中支取指定金额。
(8)一个名为deposit(amount)的函数,向账户中存入指定金额。
创建账户类Account的两个派生类——支票账户类CheckingAccount和储蓄账户类SavingsAccount,前者有一个透支额度,后者不允许透支。定义 Account类的一个常量虚函数 toString( ),并在派生类覆盖它,用来以字符串形式返回账号的余额。
编写一个测试程序,它创建一个Account对象,其ID为1122。账面余额为20000,年利率4.5%。使用withdraw函数取出2500美元,使用deposit函数存入3000美元,然后输出账面余额、月利率。再创建一个 SavingsAccount对象和一个 CheckingAccount对象,并调用这3个对象的 toString( )函数。
#include <iostream>
using namespace std;
class Account
{
private:
int id;
double balance;
double annuallntereRate;
public:
Account(){id=0;balance=0;annuallntereRate=0;}
void set(int x,double y,double z){id=x; balance=y;annuallntereRate=z;}
void getMonthlyInterestRate();
void withdraw(double amount);
void deposit(double amount);
virtual void put();
virtual void tostring()
{
cout<<"信用卡!!!"<<endl;
}
};
void Account::getMonthlyInterestRate()
{
annuallntereRate=annuallntereRate/12;
}
void Account::withdraw(double amount)
{
balance=balance-amount;
}
void Account::deposit(double amount)
{
balance=balance+amount;
}
void Account::put()
{
cout<<"账户余额:"<<balance<<endl<<"月利率:"<<annuallntereRate*100<<"%"<<endl;
}
class Checkingaccount:public Account{
public:
void put()
{
Account::put(); //还要注意一点就是这里输出主函数中的put()输出值为0,因为没有写构造函数,而基类中的为有形参的构造函数,实质上是在派生类中没有 对基类 成员做初始化而导致的!!!!
}
void tostring(){cout<<"可以透支!!"<<endl;}
};
class Savingaccount:public Account{
public:
void put()
{
Account::put();
}
void tostring(){cout<<"不可以透支!!"<<endl;}
};
int main()
{
Account a;
a.set(1122,20000,0.045);
a.withdraw(2500);
a.deposit(3000);
Account *p; //这里用到了多态中的虚函数,多态有两种的形式用法,一种就是指针,另外一种就是引用
p=&a; //要知道virtual用的函数也就是虚函数其实是!!!动态联编!!!,这样在主函数中的通过基类指针可以指向派生类的同名的虚函数调用的功能
p->put();
p->tostring();
Checkingaccount C;
p=&C;
p->put();
p->tostring();
Savingaccount S;
p=&S;
p->put();
p->tostring();
return 0;
}
需要注意的点:
1,virtual的用法,这里做到了动态联编。
2,定义了基类指针,通过多态调用派生类的函数。