<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          利用C語(yǔ)言結(jié)構(gòu)體封裝函數(shù)

          共 1744字,需瀏覽 4分鐘

           ·

          2022-04-18 00:05

          點(diǎn)擊下方程序員編程基地”,一起進(jìn)步!

          重磅干貨,第一時(shí)間送達(dá)

          來(lái)源:程序員編程基地

          作者:名燮


          C++語(yǔ)言類(lèi)中可以封裝函數(shù),體現(xiàn)了模塊操做的整體性,封裝后的函數(shù)可以完成自己獨(dú)特的功能,每個(gè)函數(shù)提供給你一個(gè)接口,使用者只需要通過(guò)這個(gè)接口傳入合法的數(shù)值便可以得到想要的結(jié)果。


          函數(shù)封裝具有保護(hù)性

          函數(shù)體內(nèi)的變量是受到這個(gè)函數(shù)保護(hù)的,這個(gè)函數(shù)外的函數(shù)想要使用該函數(shù)內(nèi)的變量一般情況下是使用不了的,從而提高了該函數(shù)的穩(wěn)定性。

          下面代碼便是C++語(yǔ)言對(duì)串口函數(shù)的封裝,這樣操作便于調(diào)用。


          class MarlinSerial //: public Stream{  public:    MarlinSerial();    void begin(long);    void end();    int peek(void);    int read(void);    void flush(void);}

          調(diào)用方法:

          MarlinSerial MSerial; //實(shí)例化一個(gè)對(duì)象MSerial.begin(9600);//設(shè)置串口的波特率為9600

          這樣便實(shí)現(xiàn)了串口的初始化。對(duì)串口操作函數(shù)進(jìn)行了模塊化封裝,代碼結(jié)構(gòu)清晰。那么C語(yǔ)言是否可以實(shí)現(xiàn)這種方式呢?


          這個(gè)最簡(jiǎn)單了,C語(yǔ)言中雖然沒(méi)有類(lèi),但有struct。這可是個(gè)好東西。我們可以在一個(gè)struct中存入數(shù)據(jù)和函數(shù)指針,以此來(lái)模擬類(lèi)行為。


          typedef struct _Parent
          {
          int a;
          int b;
          void (*print)(struct _Parent *This);

          }Parent;

          • 1

          • 2

          • 3

          • 4

          • 5

          • 6

          • 7

          • 8

          • 9


          C語(yǔ)言結(jié)構(gòu)體不能直接封裝函數(shù),但可以通過(guò)封裝函數(shù)指針的方式來(lái)實(shí)現(xiàn),下面便是我實(shí)現(xiàn)的具體方式,可以很方便的移植到任何編譯器上測(cè)試。


          serial.c文件

          /* serial.h文件 *///定義封裝函數(shù)的結(jié)構(gòu)體,并聲明外部引用//對(duì)串口操作函數(shù)封裝。typedef struct {  void begin(long);  void end();  int (*peek)();  uint8_t (*read)(void);  void (*flash)();  int (*availiable)();  void (*checkRx)();}MarlinSerial; extern MarlinSerial MSerial;

          ?

          serial.c文件

          MarlinSerial MSerial; //定義MarlinSerial類(lèi)型的結(jié)構(gòu)體MSerial  Serial_Init(){  MSerial.read = &Serial_Read;}  uint8_t Serial_Read(void){    printf("hello word!"); //在這里僅作測(cè)試所用,未列出真正的串口讀取函數(shù)}  /* main.c文件 */int main(void){    Serial_Init();    MSerial.read(); //調(diào)用串口讀取函數(shù),目前功能為打印字符串    while(1)    {       //    }}

          C語(yǔ)言類(lèi)的封裝?沒(méi)錯(cuò),就是C,而不是什么C++、C#的類(lèi)的封裝!

          說(shuō)到封裝這個(gè)面向?qū)ο蟮幕咎卣鳎敲从斜匾黄鹫勔徽劽嫦驅(qū)ο蠛头庋b這兩個(gè)概念和關(guān)系。

          1、面向?qū)ο?Object Oriented,OO)是軟件開(kāi)發(fā)方法。

          面向?qū)ο蟮母拍詈蛻?yīng)用已超越了程序設(shè)計(jì)和軟件開(kāi)發(fā),是一種對(duì)現(xiàn)實(shí)世界理解和抽象的方法,是計(jì)算機(jī)編程技術(shù)發(fā)展到一定階段后的產(chǎn)物。

          簡(jiǎn)單的說(shuō),面向?qū)ο笫且环N思想,而編程語(yǔ)言是實(shí)現(xiàn)面向?qū)ο筮@種思想的工具和方法

          2、面向?qū)ο蠛头庋b的關(guān)系

          面向?qū)ο蟮念?lèi)是封裝良好的模塊,類(lèi)定義將其說(shuō)明(用戶(hù)可見(jiàn)的外部接口)與實(shí)現(xiàn)(用戶(hù)不可見(jiàn)的內(nèi)部實(shí)現(xiàn))顯式地分開(kāi),其內(nèi)部實(shí)現(xiàn)按其具體定義的作用域提供保護(hù)。

          封裝是保證軟件部件具有優(yōu)良的模塊性的基礎(chǔ),對(duì)象是封裝的最基本單位。封裝防止了程序相互依賴(lài)而帶來(lái)的變動(dòng)影響。

          程序員編程基地

          為大家提供與Python相關(guān)的編程學(xué)習(xí)基地

          長(zhǎng)按指紋 > 識(shí)別圖中二維碼 > 添加關(guān)注

          覺(jué)得不錯(cuò),點(diǎn)個(gè)“在看”然后轉(zhuǎn)發(fā)出去

          瀏覽 48
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  爱爱网AV | 99精品国自产在线 | 日韩另类 | 青娱乐在线免费视频 | 久久久理论 |