生活随笔
收集整理的這篇文章主要介紹了
1021. 多重继承
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
我的支付寶和余額寶
支付寶AliPay和余額寶AliFund是一對好兄弟,他們來自同一個父類Account。
已知類Account是支付寶AliPay和余額寶AliFund的虛基類,包括兩個protected成員數據:
long ID;//賬號
string name;//用戶名
支付寶AliPay是類Account的保護派生類,包括兩個新增protected成員數據:
double amount;//支付寶賬戶中的金額
int out-limit;//支付寶單次轉賬上限,單次資金轉出不得超出賬戶中金額也不能超出上限
//當轉賬要求超出上述限制時,自動轉出最大允許金額
余額寶AliFund是類Account的保護派生類,包括三個新增protected成員數據:
double amount;//余額寶賬戶中的金額
double rate;//余額寶賬戶中資金年利率
int in-limit;//余額寶單次轉賬下限,單次資金轉入余額寶時不得少于該下限,上不封頂
//當轉入資金不足下限金額時,自動忽略該資金轉入操作,資金退回
為了實現支付寶賬戶和余額寶賬戶間的資金收集和轉賬等功能,現以AliPay和AliFund為基類,創建一個淘寶賬戶類My_Ali,包括以下新增數據成員:
bool auto_collect_flag;//資金自動收集標志
int threshold;//資金自動收集閾值
/若資金自動收集標志為true,當用戶支付寶賬戶金額超過資金自動收集閾值threshold時,超過且符合支付寶賬戶資金轉出限制和余額寶資金轉入下限的部分資金將自動轉入余額寶中/
增加合適的成員函數,可以實現支付寶賬戶和余額寶賬戶之間的資金轉賬和支付寶賬戶向余額寶賬戶的資金自動收集功能。
生成以上各類并編寫主函數,根據輸入的初始賬戶信息,建立用戶對象,根據用戶的賬戶操作信息,輸出用戶最后的資金信息。
測試輸入包含一個測試用例。
第一行為初始賬戶信息,第一個數據是賬號,第二個字符串是用戶名,第三個數據是支付寶初始金額,第四個數據是支付寶轉賬上限,第五個數據是余額寶初始金額,第六個數據是余額寶資金年利率,第七個數據是余額寶轉賬下限,第八個數據是資金自動收集標志,字符Y代表設置資金自動收集,字符N代表不設置資金自動收集。若設置資金自動收集,第九個數據是資金自動收集閾值,否則,第九個數據不存在。
隨后每一行代表用戶資金賬戶的一次操作,第一個數字代表當前操作的賬戶類型,1代表支付寶賬戶,2代表余額寶賬戶,第二個數字代表具體操作,1代表賬戶資金增加,2代表賬戶金額減少,3代表從當前操作賬戶轉出資金并同時轉入余額寶(當前操作賬戶為1)或者支付寶(當前操作賬戶為2),第三個數字代表操作金額。
所有資金轉出時均不能超過當前賬戶現有資金。
最后輸入0 0 0時結束。
注意:當設置資金自動收集為真時,支付寶賬戶資金每次增加時會自動觸發資金自動收集。
輸入樣例:
100001 Zhangsan 1000 30000 50000 0.047 5000 Y 3000
1 1 1500
1 2 500
1 3 500
1 1 7000
2 3 500
0 0 0
輸出樣例:
Account for Zhangsan
Total: 59000
AliPay: 3500
AliFund: 55500 with rate 4.7%
時間限制 1000 ms
內存限制 65536 kB
代碼長度限制 8192 B
判題程序
Standard
作者
YU
來源
final test多重繼承
#include<iostream>
#include<iomanip>
using namespace std;
class Account
{protected:long ID;string name;Account(){cin>>ID>>name;}
};
class AliPay:virtual protected Account
{protected:double amount;//支付寶賬戶中的金額int out_limit;//支付寶單次轉賬上限,單次資金轉出不得超出賬戶中金額也不能超出上限//當轉賬要求超出上述限制時,自動轉出最大允許金額AliPay(){cin>>amount>>out_limit;}void add(double& pay);void sub(double& pay);
};
void AliPay::add(double& pay)
{amount+=pay;
}
void AliPay::sub(double& pay)
{if(pay>amount)pay=amount;if(pay>out_limit)pay=out_limit;amount-=pay;
}
class AliFund:virtual protected Account
{protected:double amount;//余額寶賬戶中的金額double rate;//余額寶賬戶中資金年利率int in_limit;//余額寶單次轉賬下限,單次資金轉入余額寶時不得少于該下限,上不封頂//當轉入資金不足下限金額時,自動忽略該資金轉入操作,資金退回public:AliFund();void add(double& pay);void sub(double& pay);
};
void AliFund::add(double& pay)
{if(pay>=in_limit)amount+=pay;
}
void AliFund::sub(double& pay)
{if(pay>amount)pay=amount;amount-=pay;
}
AliFund::AliFund()
{cin>>amount>>rate>>in_limit;
}
class My_Ali:public AliPay,public AliFund
{bool auto_collect_flag;//資金自動收集標志int threshold; //資金自動收集閾值//若資金自動收集標志為true,當用戶支付寶賬戶金額超過資金自動收集閾值threshold時,//超過且符合支付寶賬戶資金轉出限制和余額寶資金轉入下限的部分資金將自動轉入余額寶中public:My_Ali();void payadd(double& pay){ AliPay::add(pay);autodo(); }void fundadd(double& pay){ AliFund::add(pay);}void paysub(double& pay){ AliPay::sub(pay);}void fundsub(double& pay){ AliFund::sub(pay);}void paytofund(double& pay);void fundtopay(double& pay);void autodo();void out();
};
void My_Ali::out()
{cout<<"Account for "<<name<<endl<<"Total: "<<AliFund::amount+AliPay::amount<<endl;cout<<"AliPay: "<<AliPay::amount<<endl<<"AliFund: "<<AliFund::amount<<" with rate "<<setiosflags(ios::fixed)<<setprecision(1)<<rate*100<<"%"<<dec<<endl;
}
void My_Ali::paytofund(double& pay)
{AliPay::sub(pay);if(pay>=AliFund::in_limit)AliFund::add(pay);elseAliPay::add(pay);
}
void My_Ali::fundtopay(double& pay)
{AliFund::sub(pay);AliPay::add(pay);autodo();
}
void My_Ali::autodo()
{double t=AliPay::amount-threshold;if(auto_collect_flag){if(AliPay::amount>threshold)paytofund(t);}
}
My_Ali::My_Ali()
{char t;cin>>t;if(t=='Y'){cin>>threshold;auto_collect_flag=1;}else auto_collect_flag=0;}
int main()
{int act,op;double money;My_Ali t;//t.out();cin>>op>>act>>money;while(act!=0&&op!=0&&money!=0){if(op==1){if(act==1) t.payadd(money);if(act==2) t.paysub(money);if(act==3) t.paytofund(money);}if(op==2){if(act==1) t.fundadd(money);if(act==2) t.fundsub(money);if(act==3) t.fundtopay(money);}//t.out();cin>>op>>act>>money;}t.out();
}
總結
以上是生活随笔為你收集整理的1021. 多重继承的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。