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

天行健 君子當自強而不息

一個用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精品国产在热久久下载| 99国产成+人+综合+亚洲欧美| 欧美日韩国产综合网 | 欧美一级二区| 黑人操亚洲美女惩罚| 欧美成人精品激情在线观看| 欧美精品日韩www.p站| 亚洲一区二区三区精品在线观看| 中文日韩电影网站| 黑人中文字幕一区二区三区| 亚洲国产毛片完整版| 欧美亚男人的天堂| 久久婷婷国产综合尤物精品| 欧美极品在线播放| 欧美自拍偷拍| 欧美激情 亚洲a∨综合| 欧美在线地址| 欧美国产一区二区三区激情无套| 性欧美激情精品| 另类人畜视频在线| 欧美一级一区| 欧美精品在线一区二区| 久久国产免费| 欧美日韩国产片| 免费观看久久久4p| 国产女优一区| 亚洲免费黄色| 亚洲日本一区二区| 午夜精品久久久久99热蜜桃导演| 日韩视频精品在线观看| 久久精品亚洲热| 亚洲男同1069视频| 欧美黑人多人双交| 免费观看日韩| 国产午夜久久久久| 亚洲午夜伦理| av不卡在线看| 欧美成人一品| 欧美va天堂在线| 国内精品久久久久伊人av| 一本久久a久久精品亚洲| 亚洲三级色网| 另类图片综合电影| 另类激情亚洲| 亚洲第一网站免费视频| 欧美一区二区三区四区夜夜大片 | 国产精品美女久久久免费| 亚洲娇小video精品| 一区二区三区在线观看欧美| 亚洲欧美日韩国产| 亚洲欧美综合另类中字| 欧美日韩一区二区高清| 亚洲日本欧美日韩高观看| 亚洲国产日韩美| 久久综合给合久久狠狠色| 毛片av中文字幕一区二区| 国产一区视频观看| 欧美一区日本一区韩国一区| 久久高清福利视频| 国产午夜精品在线观看| 欧美在线3区| 久久久夜色精品亚洲| 国产专区综合网| 久久精品人人做人人爽电影蜜月 | 夜夜嗨av一区二区三区网页| 欧美激情按摩| 日韩亚洲欧美综合| 午夜精彩视频在线观看不卡| 国产精品乱人伦一区二区| 亚洲一区影音先锋| 久久国产成人| 在线日本欧美| 欧美激情五月| 一区二区三区精密机械公司 | 老色鬼久久亚洲一区二区| 1204国产成人精品视频| 麻豆精品传媒视频| 亚洲人体一区| 欧美亚洲综合另类| 黄色av一区| 欧美国产乱视频| 亚洲一区二区伦理| 久久天天躁夜夜躁狠狠躁2022| 亚洲高清在线精品| 欧美色大人视频| 久久se精品一区二区| 欧美大片一区| 午夜亚洲视频| 91久久精品国产91久久| 欧美三级日韩三级国产三级| 欧美一区二区精品| 亚洲欧洲精品一区二区三区不卡 | 这里只有精品视频在线| 国产精品天天看| 美女999久久久精品视频| 中文在线不卡| 欧美风情在线观看| 欧美一级视频一区二区| 亚洲欧洲日产国产网站| 国产精品久久久久久久午夜| 久久亚洲一区| 午夜精品久久久久久久白皮肤| 欧美国内亚洲| 久久精品国内一区二区三区| av成人免费观看| 亚洲二区在线视频| 国产精品入口66mio| 欧美高清视频免费观看| 午夜一区不卡| 在线亚洲免费| 亚洲精品一区二区三区99| 狂野欧美激情性xxxx| 亚洲欧美综合网| 一区二区三区国产精华| 91久久精品www人人做人人爽 | 国产精品久久午夜夜伦鲁鲁| 久久综合五月天婷婷伊人| 香蕉精品999视频一区二区| 日韩视频免费大全中文字幕| 欧美激情1区| 免费观看一区| 美女精品网站| 久久免费精品视频| 久久精品一区二区三区不卡牛牛| 亚洲专区在线| 亚洲调教视频在线观看| 99精品国产在热久久婷婷| 亚洲国产合集| 亚洲国产欧美一区二区三区丁香婷| 国产日韩欧美在线播放不卡| 国产精品欧美日韩一区| 欧美三区在线视频| 欧美日韩一二区| 欧美午夜免费| 欧美午夜久久久| 国产精品久久久久久久7电影| 欧美日韩精品在线播放| 欧美日韩国产色站一区二区三区| 欧美第一黄色网| 欧美—级a级欧美特级ar全黄| 欧美黄在线观看| 欧美精品在线极品| 欧美日韩精品久久| 欧美视频在线观看 亚洲欧| 欧美视频一区在线观看| 国产精品久久久久aaaa九色| 国产精品亚洲美女av网站| 国产精品一二三| 国产亚洲欧美另类一区二区三区| 国产日本亚洲高清| 黑人巨大精品欧美黑白配亚洲| 樱花yy私人影院亚洲| 亚洲第一在线| av成人免费| 欧美亚洲视频| 欧美.www| 99亚洲伊人久久精品影院红桃| 亚洲一级特黄| 久久精品国产77777蜜臀| 欧美不卡高清| 国产精品久久久亚洲一区| 国产综合色一区二区三区| 亚洲精品日本| 欧美一区二区私人影院日本| 久久精品人人做人人综合| 欧美激情一区二区三区在线视频| 99国内精品久久| 欧美在线免费一级片| 欧美国产精品v| 国产精品嫩草影院一区二区| 在线观看日韩国产| 亚洲午夜久久久久久久久电影院| 久久精品亚洲热| 亚洲人成在线观看| 欧美一二三视频| 欧美久久久久免费| 国产一区二区主播在线| 夜夜嗨av色综合久久久综合网 | 99精品国产在热久久| 久久99伊人| 亚洲日本欧美日韩高观看| 欧美在线视频免费| 欧美日韩一区二区视频在线观看 | 国产精品自在在线| 亚洲精品一区久久久久久| 午夜精品偷拍| 亚洲精一区二区三区| 久久久精彩视频| 国产精品尤物| 亚洲视频在线一区| 亚洲第一中文字幕| 久久精品一区蜜桃臀影院| 国产精品久久97| 夜夜爽夜夜爽精品视频|