类似银行系统中的转账交易,a转到b,若a钱不够,需要先从a0转到a再做a到b,若a0没钱要先做a00转到a0再做a0转到a。。。
以上逻辑,拟用如下代码实现:
class Trans{
public:
void check(T * t){}
};
class Acc{
public:
int id;
int grpid;
double amt;
int action;
};
为简单说明,首先,假定如下代码:
T *a = new T();
T *b = new T();
a->id=1;a->grpid=1; a->amt=100.0; a->action=TAKE;
b->id=2;b->grpid=1; b->amt=100.0;b->action=SAVE; //a、b都属于转账组1,但有各自不同的id
之后
Trans x,y;
x.check(a); //看看a能否转走100
y.check(b); //看看b能否转入100
在x.check()中,程序认为a钱不够,必须先做a0到a,而为了区分之前的a到b,所以a0到a需要用一个新的组号(假设是11)。同样:
T *a0 = new T();
a0->id=1;
a0->grpid=11;
a0->amt=100.0;
a0->action=TAKE;