文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>多态

多态

时间:2010-10-14  来源:Cranny

//account.h

#pragma once

#include <iostream>
using namespace std;
class Account
{
public:
        Account(void);
        ~Account(void);
        Account(unsigned accNo,float balan = 0.0);
        int AccountNo();
        float AcntBalan();
        static Account* First();
        Account* Next();
        static int NoAccounts();
        void Display();
        void Deposit(float amount);

        //pure virtual function
        virtual void Withdrawal(float amount) = 0;

protected:
        static Account *pFirst;
        Account *pNext;
        static int count;
        unsigned acntNumber;
        float balance;
};


//account.cpp

#include "Account.h"

Account* Account::pFirst = (Account *)0;
int Account::count = 0;

Account::Account(void)
{
}

Account::~Account(void)
{
        count--;
        if (this == pFirst)
        {
                pFirst = this->pNext;
                return ;
        }
        for (Account *pS = pFirst;pS;pS = pS->pNext)
        {
                if (pS->pNext == this)
                {
                        pS->pNext = this->pNext;
                        return ;
                }
        }
}

Account ::Account(unsigned accNo,float balan /* = 0.0 */)
{
        acntNumber = accNo;
        balance = balan;
        pNext = (Account *)0;

        count++;

        if (pFirst == NULL)
        {
                pFirst = this;//insert to empty link list
        }
        else
        {
                Account *pS = pFirst;
                while (pS->pNext)//move to the last node
                {
                        pS = pS->pNext;
                }
                pS->pNext = this;//inert this node
        }
        pNext = (Account *)0;//this node as the last node
}

int Account ::AccountNo()
{
        return acntNumber;
}

float Account::AcntBalan()
{
        return balance;
}


Account* Account::First()
{
        return pFirst;
}

Account* Account::Next()
{
        return pNext;
}

int Account::NoAccounts()
{
        return count;
}

void Account::Display()
{
        cout<<"Account number: "<<acntNumber
                <<" = "<<balance<<endl;
}


void Account::Deposit(float amount)
{
        balance += amount;
}



//checking.h

#pragma once
#include "account.h"


enum REMIT{remitByPost, remitByCable, other};

class Checking : public Account
{
public:
        Checking(void);
        ~Checking(void);
        Checking(unsigned accNo, float balan = 0.0);
        void SetRemit(REMIT re);
        virtual void Withdrawal(float amount);
protected:
        REMIT remittance;
};



//checking.cpp
#include "Checking.h"

Checking::Checking(void)
{
}

Checking::~Checking(void)
{
}

Checking::Checking(unsigned accNo, float balan /* = 0.0 */):Account(accNo, balan)
{
        remittance = other;
}

void Checking::SetRemit(REMIT re)
{
        remittance = re;
}

void Checking::Withdrawal(float amount)
{
        cout<<"call Checking fun"<<endl;
        float temp = 0.0;
        if (remittance == remitByPost)
        {
                temp = amount + 30;
        }
        else if (remittance == remitByCable)
        {
                temp = amount + 60;
        }

        if (balance < temp)
        {
                cout<<"Insufficient funds : balance "<<balance
                        <<", withdrawal "<<temp<<endl;
        }
        else
                balance -= temp;
}


//saving.h
#pragma once
#include "account.h"

class Savings :
        public Account
{
public:
        Savings(void);
        ~Savings(void);
        Savings(unsigned accNo, float balan = 0.0);
        virtual void Withdrawal(float amount);

protected:
        static float minBalance;
};




//savings.cpp
#include "Savings.h"


float Savings::minBalance = 500.0;


Savings::Savings(void)
{
}

Savings::~Savings(void)
{
}


Savings::Savings(unsigned int accNo, float balan):Account(accNo, balan){}

void Savings::Withdrawal(float amount)
{
        cout<<"call Saving func"<<endl;
        if (balance + minBalance < amount)
        {
                cout<<"Insufficient funds : balance "<<balance
                        <<", withdrawal "                         <<amount<<endl;
        }
        else
                balance -= amount;
}





//main.cpp
#include "Checking.h"
#include "Savings.h"

void Func(Account* pA)
{
        pA->Withdrawal(300.0);
}

int main()
{
        Savings s(123,200.0);
        Checking c(1234,200.0);
        Func(&s);
        Func(&c);
        return 0;
}
相关阅读 更多 +
排行榜 更多 +
坦克冒险大师安卓版

坦克冒险大师安卓版

策略塔防 下载
自动防御

自动防御

策略塔防 下载
枪战大乱斗2

枪战大乱斗2

飞行射击 下载