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

天行健 君子當自強而不息

一個用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 閱讀(1524) 評論(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>
            亚洲欧美精品一区| 亚洲精品视频在线播放| 亚洲精选一区| 亚洲日本va午夜在线电影| 亚洲激情成人网| 亚洲无人区一区| 亚洲一区日韩在线| 久久久精品性| 亚洲黄色高清| 亚洲人体一区| 亚洲综合视频一区| 久久久久久久久久久久久久一区| 亚洲女同精品视频| 久久久久久精| 亚洲激情av| 亚洲综合日韩中文字幕v在线| 久久精品国产亚洲5555| 欧美激情精品久久久久久免费印度| 欧美日韩国产探花| 狠狠色狠色综合曰曰| 亚洲蜜桃精久久久久久久| 亚洲欧美国产精品va在线观看 | 免费黄网站欧美| 欧美激情亚洲精品| 国产亚洲福利社区一区| 一本大道av伊人久久综合| 欧美在线播放高清精品| 亚洲激情视频| 久久久精品国产免费观看同学| 欧美激情中文字幕乱码免费| 国产午夜精品全部视频播放 | 欧美成人午夜影院| 国产美女精品视频| 99re66热这里只有精品4| 久久久久久久激情视频| 一区二区三区日韩欧美精品| 另类尿喷潮videofree| 国产视频一区二区在线观看 | 亚洲综合丁香| 欧美顶级大胆免费视频| 亚洲欧美国产精品桃花| 欧美日本精品在线| 亚洲国产精品久久久久久女王| 午夜欧美不卡精品aaaaa| 欧美激情视频一区二区三区免费| 亚洲永久免费观看| 欧美午夜精品久久久久久人妖| 亚洲人体影院| 久久综合激情| 欧美影院在线| 国产欧美在线| 先锋影音国产精品| 亚洲视频欧美在线| 欧美性理论片在线观看片免费| 日韩视频在线免费| 亚洲日本一区二区| 欧美日韩视频在线一区二区| 亚洲理论在线| 最新69国产成人精品视频免费| 老司机免费视频一区二区三区| 激情欧美一区二区| 久久一二三区| 久久久噜噜噜久久狠狠50岁| 伊人久久综合| 欧美成人蜜桃| 男人的天堂亚洲| 久久久夜夜夜| 亚洲黄页一区| 亚洲精品一区二区三区婷婷月| 欧美—级a级欧美特级ar全黄| 亚洲毛片在线观看| 一本大道久久a久久精品综合| 国产精品hd| 久久久久一区二区| 理论片一区二区在线| av不卡在线看| 亚洲专区欧美专区| **网站欧美大片在线观看| 欧美高清一区| 国产精品成av人在线视午夜片| 欧美一区观看| 久久久综合网站| 亚洲视频一区| 久久精品中文字幕一区二区三区| 在线日韩电影| 亚洲另类自拍| 国内偷自视频区视频综合| 亚洲第一精品久久忘忧草社区| 欧美三级视频在线观看| 久久久国产91| 欧美伦理91| 久久久久久久尹人综合网亚洲| 美女黄毛**国产精品啪啪| 亚洲一区二区黄| 久久婷婷丁香| 午夜一区不卡| 欧美精品123区| 久久久高清一区二区三区| 欧美精品在线一区| 久久久久久久久久久久久女国产乱 | 欧美超级免费视 在线| 欧美激情女人20p| 性欧美激情精品| 免费欧美日韩| 久久久夜色精品亚洲| 欧美日韩mp4| 久久三级福利| 欧美亚洲第一区| 欧美激情精品久久久久久久变态 | 亚洲国产精品视频一区| 亚洲视频综合在线| 亚洲激情校园春色| 欧美一二三区精品| 亚洲图中文字幕| 欧美成人免费一级人片100| 久久福利电影| 国产精品久久久久久av福利软件| 欧美成年人视频| 一区二区自拍| 美女黄网久久| 国产精品伊人日日| 日韩视频永久免费| 亚洲国产一区在线| 久久爱www.| 久久国产直播| 国产精品毛片在线| 一本久道久久综合中文字幕| 最新亚洲一区| 美脚丝袜一区二区三区在线观看 | 蜜臀av一级做a爰片久久| 国产女人精品视频| 亚洲嫩草精品久久| 欧美亚洲在线观看| 国产精品久久久久久久电影| 99视频精品全国免费| 亚洲视频免费观看| 欧美日韩国产精品一卡| 亚洲精选在线| 亚洲一区二区日本| 国产精品久久久久9999| 中文久久精品| 羞羞色国产精品| 国产精品午夜视频| 久久成人免费日本黄色| 欧美aa国产视频| 亚洲黑丝在线| 欧美日本一区二区三区| 亚洲视频成人| 久久久www成人免费精品| 亚洲大胆视频| 欧美日韩国产精品自在自线| 亚洲色无码播放| 久久午夜国产精品| 亚洲麻豆视频| 国产欧美精品xxxx另类| 久久综合色影院| 亚洲精品社区| 久久爱www.| 亚洲经典一区| 欧美午夜不卡在线观看免费 | 欧美一区二区三区啪啪| 国产午夜精品视频| 欧美不卡一区| 亚洲少妇自拍| 麻豆精品在线视频| 日韩午夜剧场| 国产日韩欧美三区| 欧美剧在线观看| 香蕉久久a毛片| 欧美护士18xxxxhd| 性色av一区二区三区| 亚洲经典在线| 国产精品一区视频| 欧美日韩福利视频| 久久福利影视| 亚洲另类自拍| 欧美sm视频| 欧美一区二区三区啪啪| 91久久精品国产91久久性色tv| 国产精品豆花视频| 免费观看久久久4p| 先锋资源久久| 一本色道久久88综合亚洲精品ⅰ| 久久综合网色—综合色88| 亚洲天堂成人在线视频| 在线观看欧美日韩| 国产日韩欧美亚洲| 国产精品成人一区二区三区夜夜夜 | 久久免费视频这里只有精品| 亚洲精品影视| 伊人精品在线| 国产亚洲人成a一在线v站| 欧美日韩国产亚洲一区| 久久久视频精品| 香蕉久久一区二区不卡无毒影院| 亚洲精品一区在线观看| 欧美激情精品久久久六区热门| 久久一二三四| 久久亚洲私人国产精品va| 亚洲欧美自拍偷拍|