C++类信息的隐藏(桥接模式bridge)

C++编程思想里的一个例子。

先看代码:

handle.hpp

#ifndef HANDLE_H_
#define HANDLE_H_

class handle {
    struct cheshire;  //这里通知编译器cheshire是个结构体,结构体的定义编辑器将在cpp中找到
    cheshire* smile;

public:
    void initialize();
    void cleanup();
    int read();
    void change(int);
};

#endif // HANDLE_H_

handle.cpp

#include <iostream>
#include "handle.hpp"

using namespace std;


struct handle::cheshire {
    int i;
};

void handle::initialize() {
    smile = new cheshire();
    smile->i = 11;
}

void handle::cleanup() {
    if(smile){
        delete smile;
        smile = NULL;
    }
}

int handle::read() {
    return smile->i;
}

void handle::change(int x){
    smile->i = x;
}

int main(){
    handle h;
    h.initialize();
    h.change(888L);
    std::cout<< (h.read());
    return 0;
}


这种风格可以用在隐藏类的信息。(主要功能)

也可以减少编译时间。如果cheshire的组成改变了,之需要编译一个cpp。(按这种写法,cheshire是不易复用的)


总是,这就是典型的C++中的面向接口编程啊。


再给一段使用boost的入门代码

h文件:

#ifndef _TEST_KIN_
#define _TEST_KIN_

#include <boost/smart_ptr/shared_ptr.hpp>
#include <iostream>

void test_shared_ptr();
void test_bridge();

using namespace boost;
using namespace std;



class bridge
{
private:
    class impl;
    shared_ptr < impl > implSP;
public:
    bridge();
    void saySomething();
};

#endif // _TEST_KIN_

test_bridge.cpp

#include <boost/smart_ptr/make_shared.hpp>
#include <boost/smart_ptr/shared_ptr.hpp>
#include <vector>
#include <string>
#include "test.h"
using namespace std;
//using namespace boost;

class bridge::impl{
    string something;
public:
    impl(){
        something = "I am kinzhang.";
    }
    string getSomething(){return something;}
};


void bridge::saySomething(){
    if(implSP){
        cout << implSP->getSomething() << endl;
    }
}

bridge::bridge(){
    implSP = make_shared<impl>(); 
}

void test_bridge(){
    bridge b;
    b.saySomething();
}


posted @ 2012-10-18 13:51  林间走寸  阅读(329)  评论(0编辑  收藏  举报