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

天行健 君子當自強而不息

一個用C/C++分別實現接口與實現相分離的設計原則的例子

 
良好的設計應該只暴露接口給用戶,所有的實現細節對用戶來說應該是隱藏的,也就是說用戶只要給接口傳遞相應的參數就行了,不需要管內部是如何實現的,比如我們使用fopen,fseek,CreateWindow等函數會發現很好用,而不需要管fopen,fseek,CreateWindow函數內部代碼是如何實現的,數據結構是如何組織的,也就是說絕對不能暴露任何的細節給用戶,包括數據組織在內。

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

先來看C++用類實現的封裝:

--------------------------- 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 如何巧妙的封裝以及隱藏實現細節:

---------------------------  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的實現只暴露了接口給用戶,內部的實現細節都隱藏了起來,可是C++用類實現反而在頭文件暴露了實現細節。

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

-------------------------------------- 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 閱讀(1525) 評論(2)  編輯 收藏 引用 所屬分類: ▲ C Program

評論

# re: 一個用C/C++分別實現接口與實現相分離的設計原則的例子 2009-01-06 10:52 開區間

通俗易懂,謝謝  回復  更多評論   

# re: 一個用C/C++分別實現接口與實現相分離的設計原則的例子 2009-01-06 11:18 開區間

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

公告

導航

統計

常用鏈接

隨筆分類(178)

3D游戲編程相關鏈接

搜索

最新評論

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            亚洲午夜在线| 你懂的视频欧美| 亚洲尤物在线视频观看| 国产精品欧美日韩一区二区| 亚洲综合色丁香婷婷六月图片| 99国产精品久久久久老师| 国产精品国产三级国产aⅴ无密码| 亚洲一区中文字幕在线观看| 亚洲伊人伊色伊影伊综合网| 国产一区二区精品久久91| 另类尿喷潮videofree | 一区二区日韩伦理片| 欧美午夜电影一区| 久久精品日韩欧美| 免费人成精品欧美精品| 一区二区三区国产精品| 午夜精品免费视频| 亚洲国产精品久久久久| 一本色道久久88精品综合| 国产日韩专区| 亚洲三级视频| 国产情人节一区| 亚洲黄色成人久久久| 国产麻豆91精品| 亚洲国产欧美日韩精品| 国产精品一区二区视频| 欧美国产视频日韩| 国产精品夜夜夜| 亚洲国产高清一区二区三区| 国产精品青草久久久久福利99| 嫩草成人www欧美| 国产精品午夜视频| 亚洲第一伊人| 国内精品久久国产| 一区二区激情小说| 亚洲福利视频一区二区| 亚洲自拍电影| 艳女tv在线观看国产一区| 性做久久久久久久免费看| 99精品视频一区| 久久天天躁狠狠躁夜夜爽蜜月| 亚洲一区美女视频在线观看免费| 久久久综合免费视频| 欧美在线免费观看视频| 欧美视频一区二区三区四区| 免费久久99精品国产自在现线| 国产精品日韩一区| 亚洲巨乳在线| 亚洲欧洲精品成人久久奇米网| 欧美诱惑福利视频| 先锋影音久久久| 欧美性色综合| 99国产一区二区三精品乱码| 亚洲黄色av一区| 久久久国产精品一区| 欧美在线播放一区二区| 国产精品露脸自拍| 99在线精品视频| 一本色道久久综合亚洲精品高清| 欧美va天堂在线| 欧美成人免费在线观看| 在线观看成人小视频| 久久久久九九视频| 美女亚洲精品| 在线看一区二区| 久久在线观看视频| 亚洲成人在线视频网站| 亚洲精品人人| 欧美理论在线播放| 亚洲精品中文字幕在线观看| 日韩一二在线观看| 欧美日韩中文字幕在线| 日韩系列欧美系列| 亚洲欧美日韩国产精品| 国产精品久久综合| 欧美一级淫片aaaaaaa视频| 久久福利视频导航| 激情综合自拍| 免费成人黄色av| 日韩视频免费观看高清在线视频 | 精品电影一区| 久久女同互慰一区二区三区| 欧美大片91| 一区二区日韩| 国产视频精品网| 久久伊人精品天天| 91久久极品少妇xxxxⅹ软件| 亚洲一区二区三区精品在线观看| 国产精品久久久久久久久久久久久久| 亚洲综合精品自拍| 久久野战av| 99热这里只有成人精品国产| 国产精品久久激情| 久久久精彩视频| 妖精视频成人观看www| 午夜精品久久久久久久99水蜜桃 | 国产三区精品| 久久资源在线| 亚洲午夜高清视频| 老司机精品视频网站| 一区二区三区波多野结衣在线观看| 国产精品九九久久久久久久| 久久久国产一区二区| 日韩视频中文| 美女精品一区| 欧美亚洲三区| 日韩视频免费大全中文字幕| 国产精品羞羞答答| 欧美成人午夜77777| 亚洲欧美综合另类中字| 亚洲国产欧美日韩| 久久精品国产综合| 亚洲午夜在线| 亚洲欧洲在线视频| 国产亚洲精品aa| 欧美系列亚洲系列| 女女同性精品视频| 久久国产精品第一页| 亚洲天堂av在线免费观看| 欧美高清在线一区| 久久人人精品| 午夜一级久久| 亚洲无亚洲人成网站77777| 亚洲福利视频一区二区| 国产一区二区福利| 国产精品视频一区二区三区| 欧美日本在线| 欧美黄色影院| 欧美不卡激情三级在线观看| 久久久久久久激情视频| 欧美中文在线观看| 午夜精品久久久久久久白皮肤| 亚洲剧情一区二区| 亚洲欧洲综合另类在线| 欧美黄色精品| 欧美肥婆在线| 欧美国产日韩一区二区在线观看 | 亚洲一区二区av电影| 99re8这里有精品热视频免费 | 亚洲国产精品久久久久久女王| 国产午夜精品久久久久久免费视| 欧美午夜精品久久久| 欧美亚日韩国产aⅴ精品中极品| 欧美精品福利在线| 欧美激情一区二区三区在线| 欧美国产视频一区二区| 欧美 日韩 国产精品免费观看| 久久综合伊人77777麻豆| 久久免费视频观看| 久久综合中文字幕| 欧美成人69| 欧美日韩国产三级| 国产精品www994| 国产农村妇女毛片精品久久莱园子| 国产精品青草久久久久福利99| 国产精品亚洲欧美| 国产亚洲欧美一区在线观看| 国精产品99永久一区一区| 加勒比av一区二区| 亚洲国产午夜| 亚洲视频中文| 久久精品国内一区二区三区| 麻豆精品视频| 亚洲精品视频中文字幕| 亚洲桃色在线一区| 欧美影院视频| 欧美国产精品专区| 国产精品久久久久久久免费软件| 国产日韩欧美一区二区三区在线观看| 国产一区二区三区在线播放免费观看 | 亚洲欧美日韩精品在线| 久久精品久久99精品久久| 免费日韩成人| 国产精品盗摄一区二区三区| 国产一区二区三区免费不卡| 1024国产精品| 亚洲综合成人婷婷小说| 久久伊人免费视频| 日韩视频一区二区在线观看| 午夜精品久久久久久久久久久久久 | 亚洲网站啪啪| 久久综合一区二区三区| 欧美午夜影院| 亚洲国产成人91精品| 亚洲欧美日韩在线一区| 免费国产自线拍一欧美视频| 在线视频你懂得一区二区三区| 久久精品99国产精品酒店日本| 欧美日韩成人在线| 在线免费不卡视频| 亚洲欧美中文日韩在线| 亚洲国产另类久久精品| 性欧美8khd高清极品| 欧美日韩xxxxx| 亚洲第一在线视频| 亚欧成人在线| 99精品福利视频| 欧美电影免费观看| 影音先锋日韩资源| 久久精品国产99国产精品|