青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

天行健 君子當(dāng)自強而不息

一個用C/C++分別實現(xiàn)接口與實現(xiàn)相分離的設(shè)計原則的例子

 
良好的設(shè)計應(yīng)該只暴露接口給用戶,所有的實現(xiàn)細節(jié)對用戶來說應(yīng)該是隱藏的,也就是說用戶只要給接口傳遞相應(yīng)的參數(shù)就行了,不需要管內(nèi)部是如何實現(xiàn)的,比如我們使用fopen,fseek,CreateWindow等函數(shù)會發(fā)現(xiàn)很好用,而不需要管fopen,fseek,CreateWindow函數(shù)內(nèi)部代碼是如何實現(xiàn)的,數(shù)據(jù)結(jié)構(gòu)是如何組織的,也就是說絕對不能暴露任何的細節(jié)給用戶,包括數(shù)據(jù)組織在內(nèi)。

我現(xiàn)在用C和C++舉一個例子,來說說C/C++分別是如何實現(xiàn)的,然后來看看哪種實現(xiàn)更好。

先來看C++用類實現(xiàn)的封裝:

--------------------------- interface1.h ---------------------------

#ifndef INTERFACE1_H
#define INTERFACE1_H

class DATA
{
private:
    
int _i;
    
short _j;

public:
    DATA();
    ~DATA();

    
void set(int i, short j);
    
void get(int* i, short* j);    
};

#endif

--------------------------- interface1.cpp ---------------------------

#include "interface1.h"

DATA::DATA()
{
    _i = _j = 0;
}

DATA::~DATA()
{
    _i = _j = 0;
}


void DATA::set(int i, short j)
{
    _i = i;
    _j = j;
}

void DATA::get(int* i, short* j)
{
    *i = _i;
    *j = _j;
}

--------------------------- test.cpp ---------------------------

#include <stdio.h>
#include "interface1.h"

int main()
{
    DATA data;
    
int i;
    
short j;

    data.
set(2, 3);
    data.
get(&i, &j);
            
    printf("i = %d, j = %d\n", i, j);    

    
return 0;
}
 


再來看 C 如何巧妙的封裝以及隱藏實現(xiàn)細節(jié):

---------------------------  interface.h  ---------------------------

#ifndef INTERFACE_H
#define INTERFACE_H

void* data_create();
void data_set(void* dummy, int i, short j);
void data_get(void* dummy, int* i, short * j);
void data_destroy(void* dummy);

#endif

---------------------------  
interface.c  ---------------------------

#include <stdlib.h>

struct DATA
{
    
int i;
    
short j;
};

void* data_create()
{
    
return malloc(sizeof(struct DATA));
}

void data_set(void* dummy, int i, short j)
{
    
struct DATA* data = dummy;

    data->i = i;
    data->j = j;
}

void data_get(void* dummy, int* i, short * j)
{
    
struct DATA* data = dummy;

    *i = data->i;
    *j = data->j;
}

void data_destroy(void* dummy)
{   
    free(dummy);
}

---------------------------  test.c  ---------------------------

#include <stdio.h>
#include "interface.h"

int main()
{
    
int i;
    
short j;

    
void* data = data_create();

    data_set(data, 2, 3);

    data_get(data, &i, &j);    
    printf("i = %d, j = %d\n", i, j);

    data_destroy(data);

    
return 0;
}
 

可以看的出來,C的實現(xiàn)只暴露了接口給用戶,內(nèi)部的實現(xiàn)細節(jié)都隱藏了起來,可是C++用類實現(xiàn)反而在頭文件暴露了實現(xiàn)細節(jié)。

當(dāng)然用C++也可以做到只暴露接口給用戶,不過實現(xiàn)起來會比較復(fù)雜,而且需要消耗更多的內(nèi)存(使用了虛函數(shù))。

-------------------------------------- parent.h --------------------------------------

#ifndef PARENT_H
#define PARENT_H

class PARENT
{
public:
    
virtual void set(int i, short j) = 0; 
    
virtual void get(int* i, short* j) = 0;
};

PARENT* get_child();

#endif

-------------------------------------- parent.cpp --------------------------------------

#include "parent.h"
#include "child.h"

PARENT* get_child()
{
    
return new CHILD;
}

-------------------------------------- child.h --------------------------------------

#ifndef CHILD_H
#define CHILD_H

#include "parent.h"

class CHILD : public PARENT
{
private:
    
int _i;
    
short _j;

public:
    CHILD();
    ~CHILD();

    
void set(int i, short j);
    
void get(int* i, short* j);    
};

#endif

-------------------------------------- child.cpp --------------------------------------

#include "child.h"

CHILD::CHILD()
{
    _i = _j = 0;
}

CHILD::~CHILD()
{
    _i = _j = 0;
}


void CHILD::set(int i, short j)
{
    _i = i;
    _j = j;
}

void CHILD::get(int* i, short* j)
{
    *i = _i;
    *j = _j;
}

-------------------------------------- test.cpp --------------------------------------

#include <stdio.h>
#include "parent.h"

int main()
{    
    
int i;
    
short j;

    PARENT* parent = get_child();

    parent->
set(2, 3);
    parent->
get(&i, &j);
            
    printf("i = %d, j = %d\n", i, j);    

    
return 0;
}

 

posted on 2007-09-30 14:15 lovedday 閱讀(1524) 評論(2)  編輯 收藏 引用 所屬分類: ▲ C Program

評論

# re: 一個用C/C++分別實現(xiàn)接口與實現(xiàn)相分離的設(shè)計原則的例子 2009-01-06 10:52 開區(qū)間

通俗易懂,謝謝  回復(fù)  更多評論   

# re: 一個用C/C++分別實現(xiàn)接口與實現(xiàn)相分離的設(shè)計原則的例子 2009-01-06 11:18 開區(qū)間

不過你并沒有完全實現(xiàn)接口和實現(xiàn)的分離,只不過接口暴露到了接口類中了。
所以這篇文章,你沒有寫完。繼續(xù)吧!  回復(fù)  更多評論   

公告

導(dǎo)航

統(tǒng)計

常用鏈接

隨筆分類(178)

3D游戲編程相關(guān)鏈接

搜索

最新評論

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲区在线播放| 欧美一区二区在线| 午夜亚洲福利| 最新成人av在线| 欧美淫片网站| 蜜臀va亚洲va欧美va天堂| 一区二区欧美国产| 午夜一级久久| 女人色偷偷aa久久天堂| 尤物99国产成人精品视频| 男同欧美伦乱| 亚洲黄色尤物视频| 一区免费观看视频| 久久成人精品一区二区三区| 亚洲夫妻自拍| 亚洲在线视频观看| 亚洲影视九九影院在线观看| …久久精品99久久香蕉国产 | 国产精品久久久久久久午夜| 国产亚洲欧美日韩一区二区| 久热精品视频| 亚洲午夜三级在线| 欧美午夜片在线免费观看| 亚洲精品乱码| 亚洲欧洲日韩在线| 美日韩精品免费| 亚洲欧洲av一区二区| 精品成人一区| 欧美日韩中文| 久久躁日日躁aaaaxxxx| 国产精品夫妻自拍| 午夜久久一区| 一区二区电影免费在线观看| 国产精品日韩| 欧美日韩福利视频| 欧美极品色图| 亚洲综合首页| 欧美日韩国产精品专区| 亚洲一级片在线看| 久久免费高清视频| 性欧美大战久久久久久久免费观看| 久久精品国产2020观看福利| 一区二区三区久久| 国产精品va在线播放| 欧美国产免费| 久久精品国产亚洲a| 亚洲资源av| 国产精品一区二区久久| 欧美一级成年大片在线观看| 在线色欧美三级视频| 激情欧美一区二区| 国产亚洲欧美激情| 亚洲高清不卡在线观看| 免费国产一区二区| 六月婷婷久久| 欧美在线视频不卡| 欧美大片免费观看| 国产精品亚洲网站| 亚洲精品免费看| 亚洲一区二区免费在线| 国产精品毛片a∨一区二区三区| 午夜精品视频在线| 欧美大片免费观看| 国产亚洲欧洲| 中文久久精品| 久久精品国产在热久久| 香蕉久久一区二区不卡无毒影院| 久久久久久**毛片大全| 在线亚洲成人| 欧美精品一区二区蜜臀亚洲| 国内精品写真在线观看| 免费国产一区二区| 免费亚洲视频| 亚洲欧美综合| 亚洲国产欧美日韩精品| 亚洲精品1区2区| 另类春色校园亚洲| 亚洲风情亚aⅴ在线发布| 性欧美xxxx大乳国产app| 99精品欧美一区二区蜜桃免费| 一区二区三区 在线观看视| 欧美激情在线免费观看| 欧美精品尤物在线| 在线成人性视频| 亚洲图片欧美日产| 午夜视频一区二区| 久久福利电影| 久久免费视频网| 亚洲国产精品久久91精品| 久久九九热re6这里有精品| 亚洲欧美日韩国产一区二区| 欧美尤物一区| 国产精品久久久久久影院8一贰佰| 最新日韩在线视频| 欧美性大战久久久久久久| 亚洲美女精品成人在线视频| 一区二区三区蜜桃网| 亚洲自拍偷拍视频| 国产精品v欧美精品v日韩精品| 黄色欧美成人| 欧美成人精品在线视频| 欧美在线黄色| 亚洲欧洲精品一区二区三区 | 日韩午夜av在线| 久久国产精品99国产精| 男女精品网站| 老色批av在线精品| 国产欧美日韩专区发布| 午夜亚洲影视| 亚洲国产综合91精品麻豆| 乱中年女人伦av一区二区| 亚洲精品美女久久7777777| 欧美一级艳片视频免费观看| 亚洲精品美女| 蜜臀久久久99精品久久久久久| 国产综合色一区二区三区| 欧美日韩不卡| 狠狠色综合色综合网络| 亚洲国产高清在线观看视频| 国模精品娜娜一二三区| 香蕉精品999视频一区二区| 欧美一区二区三区久久精品茉莉花| 国产精品亚洲综合| 国产精品国产a| 午夜在线a亚洲v天堂网2018| 国产精品裸体一区二区三区| 午夜精品www| 久久久亚洲精品一区二区三区 | 欧美大片18| 久久视频这里只有精品| 国产日韩高清一区二区三区在线| 99视频在线精品国自产拍免费观看| 久久久99精品免费观看不卡| 亚洲毛片播放| 欧美人与禽性xxxxx杂性| 亚洲免费一级电影| 久久久久久久一区| 正在播放欧美一区| 国外成人在线视频| 国外成人在线视频| 亚洲高清成人| 欧美大片在线观看| 亚洲毛片在线| 欧美精品黄色| 久久综合网络一区二区| 亚洲美女尤物影院| 91久久亚洲| 亚洲视频在线看| 久久精品99久久香蕉国产色戒| 在线观看国产日韩| 欧美劲爆第一页| 老司机凹凸av亚洲导航| 久久一区二区三区国产精品| 午夜精品久久久久久久久久久久 | 今天的高清视频免费播放成人| 欧美 日韩 国产在线| 欧美一乱一性一交一视频| 在线亚洲欧美视频| 在线亚洲一区| 亚洲国产精选| 亚洲精品激情| 日韩一区二区免费高清| 欧美三级在线视频| 欧美性猛交xxxx乱大交蜜桃| 欧美日韩国产高清| 欧美午夜视频在线| 国产精品视频xxxx| 精品动漫3d一区二区三区免费| 一本色道久久综合亚洲91| 亚洲制服少妇| 久久黄金**| 老司机久久99久久精品播放免费 | 亚洲国产精品一区在线观看不卡 | 亚洲欧美中文另类| 午夜视频一区在线观看| 亚洲精品永久免费| 看片网站欧美日韩| 麻豆精品视频在线观看| 久久躁日日躁aaaaxxxx| 久久精品国产成人| 欧美福利网址| 欧美激情1区2区| 99国产精品国产精品久久| 日韩网站在线| 欧美sm重口味系列视频在线观看| 欧美在线|欧美| 久久久夜夜夜| 亚洲国产日韩欧美| 日韩视频专区| 午夜欧美大尺度福利影院在线看| 欧美精品首页| 一本色道久久综合亚洲精品按摩 | 欧美网站在线观看| 欧美在线视频导航| 欧美黄色小视频| 国产原创一区二区| 亚洲第一在线视频| 香蕉久久a毛片| 国产精品有限公司| 宅男精品视频|