易截截图软件、单文件、免安装、纯绿色、仅160KB

C++接口与实现分离的2种方法 (C/C++)

方法一:使用另一个实现类分装类的私有成员和函数,这种方法称为Pimpl方法。
test.h
#pragma once
#include "shared_ptr.hpp"
class CTest
{
public:
    CTest(void);
    ~CTest(void);
    void DoSomething();
private:
    class CTestImp;
    boost::shared_ptr<CTestImp> pimpl_;
};
test.cpp
#include "Test.h"
#include <iostream>
class CTest::CTestImp
{
private:
    CTestImp(CTestImp const &){}
    CTestImp & operator=(CTestImp const &){}
public:
    CTestImp(){}
    void DoSomething();
};
void CTest::CTestImp::DoSomething()
{
    // do something.
    std::cout<<"Imp class do something."<<std::endl;
}
CTest::CTest(void)
{
    boost::shared_ptr<CTestImp> pImp(new CTestImp);
    pimpl_ = pImp;
}
CTest::~CTest(void)
{
}
void CTest::DoSomething()
{
    pimpl_->DoSomething();
}
方法二:使用抽象类来实现接口与实现的分离。
x.h 
#pragma once
#include <stdio.h>
#include "shared_ptr.hpp"
using namespace boost;
class X
{
public:
    virtual void f() = 0;
    virtual void g() = 0;
protected:
    ~X() { printf("~X\n");}
};
shared_ptr<X> createX();
x.cpp 
#include "X.h"
#include <stdio.h>
class X_impl: public X
{
private:
    X_impl(){};    
    X_impl(X_impl const &);
    X_impl &&n


相关文档:

C\C++相关问题整理(1)

随机生成整数,然后算出正负零
void getrand(int *a, int m)
{
    int i;
    srand(time(NULL));
    for (i=0; i<m; i++)
    {
        a = rand()-rand();
    }
}
int main(int argc, char* argv[])
{
    ......

区别java的 C++内存分配 知识,全局,局部,静态变量


预备知识—程序的内存分配 
一个由C/C++编译的程序占用的内存分为以下几个部分 
1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 
2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号