注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

HongMain 的博客

关注编程技术: Linux, Windows, C/C++

 
 
 

日志

 
 
 
 

Ruminations on C++ 中的代理类Demo  

2011-08-06 11:53:27|  分类: 实用代码 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
看Ruminations on C++ 的时候照着写的,简单的框架,留作备份吧。

Ruminations on C++ 中的代理类Demo - HongMain - HongMain 的博客// 代理类 Demo
Ruminations on C++ 中的代理类Demo - HongMain - HongMain 的博客
// 将继承和容器共用,迫使我们要处理两个问题:
Ruminations on C++ 中的代理类Demo - HongMain - HongMain 的博客
// 控制内存分配和把不同类型的对象放入同一个容器中。
Ruminations on C++ 中的代理类Demo - HongMain - HongMain 的博客
// 代理类的每个对象都代表另一个对象,该对象可以是
Ruminations on C++ 中的代理类Demo - HongMain - HongMain 的博客
// 位于一个完整继承层次中的任何类的对象。通过在容器中
Ruminations on C++ 中的代理类Demo - HongMain - HongMain 的博客
// 用代理对象而不是对象本身来解决以上两个问题
Ruminations on C++ 中的代理类Demo - HongMain - HongMain 的博客

Ruminations on C++ 中的代理类Demo - HongMain - HongMain 的博客#include 
<process.h>        // system()
Ruminations on C++ 中的代理类Demo - HongMain - HongMain 的博客
#include <iostream>
Ruminations on C++ 中的代理类Demo - HongMain - HongMain 的博客
using namespace std;
Ruminations on C++ 中的代理类Demo - HongMain - HongMain 的博客
Ruminations on C++ 中的代理类Demo - HongMain - HongMain 的博客
// 所有交通工具的基类
Ruminations on C++ 中的代理类Demo - HongMain - HongMain 的博客
class Vehicle
Ruminations on C++ 中的代理类Demo - HongMain - HongMain 的博客
{
Ruminations on C++ 中的代理类Demo - HongMain - HongMain 的博客
public:
Ruminations on C++ 中的代理类Demo - HongMain - HongMain 的博客    
virtual void start() = 0;
Ruminations on C++ 中的代理类Demo - HongMain - HongMain 的博客    
// 动态复制
Ruminations on C++ 中的代理类Demo - HongMain - HongMain 的博客
    virtual Vehicle* copy() const = 0;
Ruminations on C++ 中的代理类Demo - HongMain - HongMain 的博客    
// 虚析构函数
Ruminations on C++ 中的代理类Demo - HongMain - HongMain 的博客
    virtual ~Vehicle() {}
Ruminations on C++ 中的代理类Demo - HongMain - HongMain 的博客}
;
Ruminations on C++ 中的代理类Demo - HongMain - HongMain 的博客
Ruminations on C++ 中的代理类Demo - HongMain - HongMain 的博客
// 交通工具的代理类
Ruminations on C++ 中的代理类Demo - HongMain - HongMain 的博客
class VehicleSurrogate
Ruminations on C++ 中的代理类Demo - HongMain - HongMain 的博客
{
Ruminations on C++ 中的代理类Demo - HongMain - HongMain 的博客
public:
Ruminations on C++ 中的代理类Demo - HongMain - HongMain 的博客    
// 无参构造函数,用于创建数组
Ruminations on C++ 中的代理类Demo - HongMain - HongMain 的博客
    VehicleSurrogate();
Ruminations on C++ 中的代理类Demo - HongMain - HongMain 的博客    
// 用Vehicle 及其派生类构造
Ruminations on C++ 中的代理类Demo - HongMain - HongMain 的博客
    VehicleSurrogate(const Vehicle&);
Ruminations on C++ 中的代理类Demo - HongMain - HongMain 的博客    
~VehicleSurrogate();
Ruminations on C++ 中的代理类Demo - HongMain - HongMain 的博客    
// 拷贝及赋值
Ruminations on C++ 中的代理类Demo - HongMain - HongMain 的博客
    VehicleSurrogate(const VehicleSurrogate&);
Ruminations on C++ 中的代理类Demo - HongMain - HongMain 的博客    VehicleSurrogate
& operator=(const VehicleSurrogate&);
Ruminations on C++ 中的代理类Demo - HongMain - HongMain 的博客
Ruminations on C++ 中的代理类Demo - HongMain - HongMain 的博客    
// Vehicle 的方法
Ruminations on C++ 中的代理类Demo - HongMain - HongMain 的博客
    void start();
Ruminations on C++ 中的代理类Demo - HongMain - HongMain 的博客
private:
Ruminations on C++ 中的代理类Demo - HongMain - HongMain 的博客    Vehicle
* p;
Ruminations on C++ 中的代理类Demo - HongMain - HongMain 的博客}
;
Ruminations on C++ 中的代理类Demo - HongMain - HongMain 的博客
Ruminations on C++ 中的代理类Demo - HongMain - HongMain 的博客VehicleSurrogate::VehicleSurrogate() : p(
0{}
Ruminations on C++ 中的代理类Demo - HongMain - HongMain 的博客
Ruminations on C++ 中的代理类Demo - HongMain - HongMain 的博客VehicleSurrogate::VehicleSurrogate(
const Vehicle& v) : p(v.copy()) {}
Ruminations on C++ 中的代理类Demo - HongMain - HongMain 的博客
Ruminations on C++ 中的代理类Demo - HongMain - HongMain 的博客VehicleSurrogate::VehicleSurrogate(
const VehicleSurrogate& vs) 
Ruminations on C++ 中的代理类Demo - HongMain - HongMain 的博客: p(vs.p 
? vs.p->copy() : 0{}
Ruminations on C++ 中的代理类Demo - HongMain - HongMain 的博客
Ruminations on C++ 中的代理类Demo - HongMain - HongMain 的博客VehicleSurrogate 
& VehicleSurrogate::operator =(const VehicleSurrogate& vs)
Ruminations on C++ 中的代理类Demo - HongMain - HongMain 的博客
{
Ruminations on C++ 中的代理类Demo - HongMain - HongMain 的博客    
if (p != vs.p)
Ruminations on C++ 中的代理类Demo - HongMain - HongMain 的博客    
{
Ruminations on C++ 中的代理类Demo - HongMain - HongMain 的博客        delete p;
Ruminations on C++ 中的代理类Demo - HongMain - HongMain 的博客        p 
= vs.p ? vs.p->copy() : 0;
Ruminations on C++ 中的代理类Demo - HongMain - HongMain 的博客    }

Ruminations on C++ 中的代理类Demo - HongMain - HongMain 的博客    
return *this;
Ruminations on C++ 中的代理类Demo - HongMain - HongMain 的博客}

Ruminations on C++ 中的代理类Demo - HongMain - HongMain 的博客
Ruminations on C++ 中的代理类Demo - HongMain - HongMain 的博客VehicleSurrogate::
~VehicleSurrogate() { delete p; }
Ruminations on C++ 中的代理类Demo - HongMain - HongMain 的博客
Ruminations on C++ 中的代理类Demo - HongMain - HongMain 的博客
void VehicleSurrogate::start()
Ruminations on C++ 中的代理类Demo - HongMain - HongMain 的博客
{
Ruminations on C++ 中的代理类Demo - HongMain - HongMain 的博客    
if (p)
Ruminations on C++ 中的代理类Demo - HongMain - HongMain 的博客        p
->start();
Ruminations on C++ 中的代理类Demo - HongMain - HongMain 的博客    
else
Ruminations on C++ 中的代理类Demo - HongMain - HongMain 的博客        cout 
<< "Error" << endl;
Ruminations on C++ 中的代理类Demo - HongMain - HongMain 的博客}

Ruminations on C++ 中的代理类Demo - HongMain - HongMain 的博客
Ruminations on C++ 中的代理类Demo - HongMain - HongMain 的博客
class RoadVehicle : public Vehicle
Ruminations on C++ 中的代理类Demo - HongMain - HongMain 的博客
{
Ruminations on C++ 中的代理类Demo - HongMain - HongMain 的博客
public :
Ruminations on C++ 中的代理类Demo - HongMain - HongMain 的博客    
void start()
Ruminations on C++ 中的代理类Demo - HongMain - HongMain 的博客    
{
Ruminations on C++ 中的代理类Demo - HongMain - HongMain 的博客        cout 
<< "RoadVehicle start." << endl;
Ruminations on C++ 中的代理类Demo - HongMain - HongMain 的博客    }

Ruminations on C++ 中的代理类Demo - HongMain - HongMain 的博客    Vehicle
* copy() const
Ruminations on C++ 中的代理类Demo - HongMain - HongMain 的博客    
{
Ruminations on C++ 中的代理类Demo - HongMain - HongMain 的博客        
return (Vehicle*new RoadVehicle(*this);
Ruminations on C++ 中的代理类Demo - HongMain - HongMain 的博客    }

Ruminations on C++ 中的代理类Demo - HongMain - HongMain 的博客    
~RoadVehicle()
Ruminations on C++ 中的代理类Demo - HongMain - HongMain 的博客    
{
Ruminations on C++ 中的代理类Demo - HongMain - HongMain 的博客    }

Ruminations on C++ 中的代理类Demo - HongMain - HongMain 的博客}
;
Ruminations on C++ 中的代理类Demo - HongMain - HongMain 的博客
Ruminations on C++ 中的代理类Demo - HongMain - HongMain 的博客
class AutoVehicle : public RoadVehicle
Ruminations on C++ 中的代理类Demo - HongMain - HongMain 的博客
{
Ruminations on C++ 中的代理类Demo - HongMain - HongMain 的博客
public :
Ruminations on C++ 中的代理类Demo - HongMain - HongMain 的博客    
void start()
Ruminations on C++ 中的代理类Demo - HongMain - HongMain 的博客    
{
Ruminations on C++ 中的代理类Demo - HongMain - HongMain 的博客        cout 
<< "AutoVehicle start." << endl;
Ruminations on C++ 中的代理类Demo - HongMain - HongMain 的博客    }

Ruminations on C++ 中的代理类Demo - HongMain - HongMain 的博客    Vehicle
* copy() const
Ruminations on C++ 中的代理类Demo - HongMain - HongMain 的博客    
{
Ruminations on C++ 中的代理类Demo - HongMain - HongMain 的博客        
return (Vehicle*new AutoVehicle(*this);
Ruminations on C++ 中的代理类Demo - HongMain - HongMain 的博客    }

Ruminations on C++ 中的代理类Demo - HongMain - HongMain 的博客    
~AutoVehicle()
Ruminations on C++ 中的代理类Demo - HongMain - HongMain 的博客    
{
Ruminations on C++ 中的代理类Demo - HongMain - HongMain 的博客    }

Ruminations on C++ 中的代理类Demo - HongMain - HongMain 的博客}
;
Ruminations on C++ 中的代理类Demo - HongMain - HongMain 的博客
Ruminations on C++ 中的代理类Demo - HongMain - HongMain 的博客
void main()
Ruminations on C++ 中的代理类Demo - HongMain - HongMain 的博客
{
Ruminations on C++ 中的代理类Demo - HongMain - HongMain 的博客    VehicleSurrogate pa[
3];
Ruminations on C++ 中的代理类Demo - HongMain - HongMain 的博客    RoadVehicle
* prv = new RoadVehicle();
Ruminations on C++ 中的代理类Demo - HongMain - HongMain 的博客    pa[
0= *prv;
Ruminations on C++ 中的代理类Demo - HongMain - HongMain 的博客    delete prv;
Ruminations on C++ 中的代理类Demo - HongMain - HongMain 的博客    pa[
1= AutoVehicle();
Ruminations on C++ 中的代理类Demo - HongMain - HongMain 的博客    pa[
2= RoadVehicle();
Ruminations on C++ 中的代理类Demo - HongMain - HongMain 的博客    pa[
0].start();
Ruminations on C++ 中的代理类Demo - HongMain - HongMain 的博客    pa[
1].start();
Ruminations on C++ 中的代理类Demo - HongMain - HongMain 的博客    pa[
2].start();
Ruminations on C++ 中的代理类Demo - HongMain - HongMain 的博客    system(
"pause");
Ruminations on C++ 中的代理类Demo - HongMain - HongMain 的博客}
  评论这张
 
阅读(15)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017