| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 515 人关注过本帖
标题:问题求教!
只看楼主 加入收藏
lzyren2008
Rank: 1
等 级:新手上路
帖 子:36
专家分:0
注 册:2007-8-12
收藏
 问题点数:0 回复次数:3 
问题求教!
#include <string>
#include <iostream>
using namespace std;
class PurchaseRequest {
public:
    double Amount;       // 一个采购的金额
    int Number;              // 采购单编号
    string Purpose;        // 采购目的
};
class Approver {              // 审批者类
public:
    Approver(){    successor = NULL;    }
    virtual void ProcessRequest(PurchaseRequest aRequest)
    {
        if (successor != NULL){  successor->ProcessRequest(aRequest);    }
    }
    void SetSuccessor(Approver *aSuccesssor){ successor = aSuccesssor; }
private:
      Approver* successor;
};
class Congress : public Approver {
public:
    void ProcessRequest(PurchaseRequest aRequest){
        if(aRequest.Amount >= 500000){    /* 决定是否审批的代码省略 */    }
        else   Approver::ProcessRequest(aRequest);
    }
};
class Director : public Approver {
public:
    void ProcessRequest(PurchaseRequest aRequest){  /* 此处代码省略 */    }
};
class President : public Approver {
public:
    void ProcessRequest(PurchaseRequest aRequest){  /* 此处代码省略 */  }
};
class VicePresident : public Approver {
public:
    void ProcessRequest(PurchaseRequest aRequest){  /* 此处代码省略 */   }
};
void main(){
    Congress Meeting;  
    VicePresident VPre;  
    Director Dir;  
    President Pre;      
    // 构造责任链
    Meeting.SetSuccessor(NULL);        
    VPre.SetSuccessor(&Pre);
    Pre.SetSuccessor(&Meeting);
    Dir.SetSuccessor(&VPre);
    
    PurchaseRequest aRequest;     // 构造一采购审批请求
    cin >> aRequest.Amount;   // 输入采购请求的金额
    
    Dir.ProcessRequest(aRequest);     // 开始审批
    return ;
}
07年下半年软设最后一题,这个搞不懂了,不知怎么传来传去的,希望那位高手能解答一下,万分感激了!
2008-03-28 09:34
中学者
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:20
帖 子:3554
专家分:80
注 册:2007-9-14
收藏
得分:0 
问题是什么?? 什么是传来传去~

樱花大战,  有爱.
2008-03-28 09:38
sunkaidong
Rank: 4
来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4496
专家分:141
注 册:2006-12-28
收藏
得分:0 
我也参加了去年的考试..建议lz多看看书..这是一个审批过程...每个审批这都设立继任者,继任者的顺序我忘了,以钱的多少作为条件,如果满足就进行处理,不满足就给继任者....里面用到了基类指针指向派生类....同时由于每个函数都是基类虚函数重构...实现动态编连通过基类指针访问派生类函数....

[[it] 本帖最后由 sunkaidong 于 2008-3-28 10:30 编辑 [/it]]

学习需要安静。。海盗要重新来过。。
2008-03-28 10:09
sunkaidong
Rank: 4
来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4496
专家分:141
注 册:2006-12-28
收藏
得分:0 
#include <string>
#include <iostream>
using namespace std;
class PurchaseRequest {
public:
    double Amount;       // 一个采购的金额
    int Number;              // 采购单编号
    string Purpose;        // 采购目的
};
class Approver {              // 审批者类
public:
    Approver(){    successor = NULL;    }
    virtual void ProcessRequest(PurchaseRequest aRequest)
    {
        if (successor != NULL){  successor->ProcessRequest(aRequest);    }
    }
    void SetSuccessor(Approver *aSuccesssor){ successor = aSuccesssor; }
private:
      Approver* successor;
};
class Congress : public Approver {
public:
    void ProcessRequest(PurchaseRequest aRequest){
        if(aRequest.Amount >= 500000)
        {
            cout<<"议案由议会说了算"<<endl;
        }
        else   Approver::ProcessRequest(aRequest);
    }
};
class Director : public Approver {
public:
    void ProcessRequest(PurchaseRequest aRequest)
    {   if(aRequest.Amount <10000)
        {
        cout<<"议案由主任说了算"<<endl;
        }
        else
            Approver::ProcessRequest(aRequest);
    }
};
class President : public Approver
{
public:
    void ProcessRequest(PurchaseRequest aRequest)
    {
        if(aRequest.Amount <500000)
        {
        cout<<"议案由董事长说了算"<<endl;
        }
        else
            Approver::ProcessRequest(aRequest);
        }
    };

class VicePresident : public Approver
{
public:
    void ProcessRequest(PurchaseRequest aRequest)
    {  if(aRequest.Amount <100000)
        {
        cout<<"议案由副董事长说了算"<<endl;
        }
        else
            Approver::ProcessRequest(aRequest);
        }   
};
void main(){
    Congress Meeting;  
    VicePresident VPre;  
    Director Dir;  
    President Pre;
    

    Meeting.SetSuccessor(NULL);        
    VPre.SetSuccessor(&Pre);
    Pre.SetSuccessor(&Meeting);
    Dir.SetSuccessor(&VPre);
   
    PurchaseRequest aRequest;     // 构造一采购审批请求
    cin >> aRequest.Amount;   // 输入采购请求的金额
   
    Dir.ProcessRequest(aRequest);     // 开始审批
    return ;
}

学习需要安静。。海盗要重新来过。。
2008-03-28 10:48
快速回复:问题求教!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020927 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved