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

Silence的博客

大师只有一个

 
 
 

日志

 
 

转:C++接口与实现分离的2种方法  

2010-08-30 17:27:40|  分类: 技术 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
方法一:使用另一个实现类分装类的私有成员和函数,这种方法称为Pimpl方法。
test.h
转:C++接口与实现分离的2种方法 - Silence - Silence的博客#pragma once
转:C++接口与实现分离的2种方法 - Silence - Silence的博客#include "shared_ptr.hpp"
转:C++接口与实现分离的2种方法 - Silence - Silence的博客class CTest
转:C++接口与实现分离的2种方法 - Silence - Silence的博客转:C++接口与实现分离的2种方法 - Silence - Silence的博客转:C++接口与实现分离的2种方法 - Silence - Silence的博客{
转:C++接口与实现分离的2种方法 - Silence - Silence的博客public:
转:C++接口与实现分离的2种方法 - Silence - Silence的博客    CTest(void);
转:C++接口与实现分离的2种方法 - Silence - Silence的博客    ~CTest(void);
转:C++接口与实现分离的2种方法 - Silence - Silence的博客    void DoSomething();
转:C++接口与实现分离的2种方法 - Silence - Silence的博客
转:C++接口与实现分离的2种方法 - Silence - Silence的博客private:
转:C++接口与实现分离的2种方法 - Silence - Silence的博客    class CTestImp;
转:C++接口与实现分离的2种方法 - Silence - Silence的博客    boost::shared_ptr<CTestImp> pimpl_;
转:C++接口与实现分离的2种方法 - Silence - Silence的博客};
test.cpp

 


转:C++接口与实现分离的2种方法 - Silence - Silence的博客#include "Test.h"
转:C++接口与实现分离的2种方法 - Silence - Silence的博客#include <iostream>
转:C++接口与实现分离的2种方法 - Silence - Silence的博客
转:C++接口与实现分离的2种方法 - Silence - Silence的博客class CTest::CTestImp
转:C++接口与实现分离的2种方法 - Silence - Silence的博客转:C++接口与实现分离的2种方法 - Silence - Silence的博客转:C++接口与实现分离的2种方法 - Silence - Silence的博客{
转:C++接口与实现分离的2种方法 - Silence - Silence的博客private:
转:C++接口与实现分离的2种方法 - Silence - Silence的博客转:C++接口与实现分离的2种方法 - Silence - Silence的博客    CTestImp(CTestImp const &)转:C++接口与实现分离的2种方法 - Silence - Silence的博客{}
转:C++接口与实现分离的2种方法 - Silence - Silence的博客转:C++接口与实现分离的2种方法 - Silence - Silence的博客    CTestImp & operator=(CTestImp const &)转:C++接口与实现分离的2种方法 - Silence - Silence的博客{}
转:C++接口与实现分离的2种方法 - Silence - Silence的博客
转:C++接口与实现分离的2种方法 - Silence - Silence的博客public:
转:C++接口与实现分离的2种方法 - Silence - Silence的博客转:C++接口与实现分离的2种方法 - Silence - Silence的博客    CTestImp()转:C++接口与实现分离的2种方法 - Silence - Silence的博客{}
转:C++接口与实现分离的2种方法 - Silence - Silence的博客    void DoSomething();
转:C++接口与实现分离的2种方法 - Silence - Silence的博客};
转:C++接口与实现分离的2种方法 - Silence - Silence的博客
转:C++接口与实现分离的2种方法 - Silence - Silence的博客void CTest::CTestImp::DoSomething()
转:C++接口与实现分离的2种方法 - Silence - Silence的博客转:C++接口与实现分离的2种方法 - Silence - Silence的博客转:C++接口与实现分离的2种方法 - Silence - Silence的博客{
转:C++接口与实现分离的2种方法 - Silence - Silence的博客    // do something.
转:C++接口与实现分离的2种方法 - Silence - Silence的博客    std::cout<<"Imp class do something."<<std::endl;
转:C++接口与实现分离的2种方法 - Silence - Silence的博客}
转:C++接口与实现分离的2种方法 - Silence - Silence的博客
转:C++接口与实现分离的2种方法 - Silence - Silence的博客CTest::CTest(void)
转:C++接口与实现分离的2种方法 - Silence - Silence的博客转:C++接口与实现分离的2种方法 - Silence - Silence的博客转:C++接口与实现分离的2种方法 - Silence - Silence的博客{
转:C++接口与实现分离的2种方法 - Silence - Silence的博客    boost::shared_ptr<CTestImp> pImp(new CTestImp);
转:C++接口与实现分离的2种方法 - Silence - Silence的博客    pimpl_ = pImp;
转:C++接口与实现分离的2种方法 - Silence - Silence的博客}
转:C++接口与实现分离的2种方法 - Silence - Silence的博客
转:C++接口与实现分离的2种方法 - Silence - Silence的博客CTest::~CTest(void)
转:C++接口与实现分离的2种方法 - Silence - Silence的博客转:C++接口与实现分离的2种方法 - Silence - Silence的博客转:C++接口与实现分离的2种方法 - Silence - Silence的博客{
转:C++接口与实现分离的2种方法 - Silence - Silence的博客}
转:C++接口与实现分离的2种方法 - Silence - Silence的博客
转:C++接口与实现分离的2种方法 - Silence - Silence的博客void CTest::DoSomething()
转:C++接口与实现分离的2种方法 - Silence - Silence的博客转:C++接口与实现分离的2种方法 - Silence - Silence的博客转:C++接口与实现分离的2种方法 - Silence - Silence的博客{
转:C++接口与实现分离的2种方法 - Silence - Silence的博客    pimpl_->DoSomething();
转:C++接口与实现分离的2种方法 - Silence - Silence的博客}


方法二:使用抽象类来实现接口与实现的分离。
x.h 


转:C++接口与实现分离的2种方法 - Silence - Silence的博客#pragma once
转:C++接口与实现分离的2种方法 - Silence - Silence的博客#include <stdio.h>
转:C++接口与实现分离的2种方法 - Silence - Silence的博客#include "shared_ptr.hpp"
转:C++接口与实现分离的2种方法 - Silence - Silence的博客using namespace boost;
转:C++接口与实现分离的2种方法 - Silence - Silence的博客
转:C++接口与实现分离的2种方法 - Silence - Silence的博客class X
转:C++接口与实现分离的2种方法 - Silence - Silence的博客转:C++接口与实现分离的2种方法 - Silence - Silence的博客转:C++接口与实现分离的2种方法 - Silence - Silence的博客{
转:C++接口与实现分离的2种方法 - Silence - Silence的博客public:
转:C++接口与实现分离的2种方法 - Silence - Silence的博客    virtual void f() = 0;
转:C++接口与实现分离的2种方法 - Silence - Silence的博客    virtual void g() = 0;
转:C++接口与实现分离的2种方法 - Silence - Silence的博客
转:C++接口与实现分离的2种方法 - Silence - Silence的博客protected:
转:C++接口与实现分离的2种方法 - Silence - Silence的博客转:C++接口与实现分离的2种方法 - Silence - Silence的博客    ~X() 转:C++接口与实现分离的2种方法 - Silence - Silence的博客{ printf("~X\n");}
转:C++接口与实现分离的2种方法 - Silence - Silence的博客};
转:C++接口与实现分离的2种方法 - Silence - Silence的博客
转:C++接口与实现分离的2种方法 - Silence - Silence的博客shared_ptr<X> createX();

 
x.cpp 


转:C++接口与实现分离的2种方法 - Silence - Silence的博客#include "X.h"
转:C++接口与实现分离的2种方法 - Silence - Silence的博客#include <stdio.h>
转:C++接口与实现分离的2种方法 - Silence - Silence的博客
转:C++接口与实现分离的2种方法 - Silence - Silence的博客class X_impl: public X
转:C++接口与实现分离的2种方法 - Silence - Silence的博客转:C++接口与实现分离的2种方法 - Silence - Silence的博客转:C++接口与实现分离的2种方法 - Silence - Silence的博客{
转:C++接口与实现分离的2种方法 - Silence - Silence的博客private:
转:C++接口与实现分离的2种方法 - Silence - Silence的博客转:C++接口与实现分离的2种方法 - Silence - Silence的博客    X_impl()转:C++接口与实现分离的2种方法 - Silence - Silence的博客{};    
转:C++接口与实现分离的2种方法 - Silence - Silence的博客    X_impl(X_impl const &);
转:C++接口与实现分离的2种方法 - Silence - Silence的博客    X_impl & operator=(X_impl const &);
转:C++接口与实现分离的2种方法 - Silence - Silence的博客
转:C++接口与实现分离的2种方法 - Silence - Silence的博客public:
转:C++接口与实现分离的2种方法 - Silence - Silence的博客转:C++接口与实现分离的2种方法 - Silence - Silence的博客    ~X_impl()转:C++接口与实现分离的2种方法 - Silence - Silence的博客{printf("~X_impl\n");};
转:C++接口与实现分离的2种方法 - Silence - Silence的博客    virtual void f()
转:C++接口与实现分离的2种方法 - Silence - Silence的博客转:C++接口与实现分离的2种方法 - Silence - Silence的博客    转:C++接口与实现分离的2种方法 - Silence - Silence的博客{
转:C++接口与实现分离的2种方法 - Silence - Silence的博客      printf("X_impl.f()\n");
转:C++接口与实现分离的2种方法 - Silence - Silence的博客    }
转:C++接口与实现分离的2种方法 - Silence - Silence的博客    virtual void g()
转:C++接口与实现分离的2种方法 - Silence - Silence的博客转:C++接口与实现分离的2种方法 - Silence - Silence的博客    转:C++接口与实现分离的2种方法 - Silence - Silence的博客{
转:C++接口与实现分离的2种方法 - Silence - Silence的博客      printf("X_impl.g()\n");
转:C++接口与实现分离的2种方法 - Silence - Silence的博客    }
转:C++接口与实现分离的2种方法 - Silence - Silence的博客private:
转:C++接口与实现分离的2种方法 - Silence - Silence的博客    friend shared_ptr<X> createX();
转:C++接口与实现分离的2种方法 - Silence - Silence的博客};
转:C++接口与实现分离的2种方法 - Silence - Silence的博客
转:C++接口与实现分离的2种方法 - Silence - Silence的博客shared_ptr<X> createX()
转:C++接口与实现分离的2种方法 - Silence - Silence的博客转:C++接口与实现分离的2种方法 - Silence - Silence的博客转:C++接口与实现分离的2种方法 - Silence - Silence的博客{
转:C++接口与实现分离的2种方法 - Silence - Silence的博客    shared_ptr<X> px(new X_impl);
转:C++接口与实现分离的2种方法 - Silence - Silence的博客    return px;
转:C++接口与实现分离的2种方法 - Silence - Silence的博客}
总结:
       接口与实现的分离,有助于我们对代码实现的保护,特别是如果我们开发lib共别人使用使,更要注意。在实现分离的过程中,最好采用上面的第一种方法的智能指针boost::shared_ptr的实现,简单安全。
  评论这张
 
阅读(456)| 评论(0)
推荐 转载

历史上的今天

评论

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

页脚

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