• <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>

            eryar

            PipeCAD - Plant Piping Design Software.
            RvmTranslator - Translate AVEVA RVM to OBJ, glTF, etc.
            posts - 603, comments - 590, trackbacks - 0, articles - 0

             

            Writing Serializable Classes

            定義可序列化的類

            盡管MFCCFile類使文件的讀寫變得相當容易,但是通常MFC程序都不直接使用CFile對象。相反地,他們使用CArchive類來實現(xiàn)文件的讀寫,CArchive類最終還是通過CFile類來實現(xiàn)文件輸入/輸出。MFC得載了 <<>> 操作符來實現(xiàn)數(shù)據(jù)的進、出,主要是因為程序通常也是將數(shù)據(jù)存入或?qū)?shù)據(jù)取出。

            SerializationMFC中一個重要概念,因為他是MFC在文檔/視的程序中實現(xiàn)打開和保存文件的基礎(chǔ)。

            定義可序列化的類

            一個對象若要支持可序列化,它必須是可序列化類的實例。定義一個可序列化的類分為以下五步:

            1. 使該類直接或間接繼承類CObject;
            2. 在類聲明中包含MFC的宏DECLARE_SERIALDECLARE_SERIAL只要一個參數(shù):類名;
            3. 重載基類的Serialize函數(shù),并序列化繼承類的成員數(shù)據(jù);
            4. 若繼承類沒有默認構(gòu)造函數(shù),添加之。這步是必須的,因為當一個對象載入時,MFC使用默認構(gòu)造函數(shù)創(chuàng)建一個對象,并用文件中的數(shù)據(jù)來初始化對象的成員函數(shù);
            5. 在類的實現(xiàn)中包含MFC的宏IMPLEMENT_SERIAL。宏IMPLEMENT_SERIAL需要三個參數(shù):類名、基類名和模式號(schema number)。模式號是一個整數(shù),表示一個版本號。

            實例

            假設(shè)你定義了一個類CLine來表示直線,類有兩個CPoint的成員變量來存儲直線的端點,你想使這個類支持序列化。原始的類聲明如下:

               1:  class CLine
               2:  {
               3:  protected:
               4:      CPoint m_ptFrom;
               5:      CPoint m_ptTo;
               6:   
               7:  public:
               8:      CLine (CPoint from, CPoint to) { m_ptFrom = from; m_ptTo = to; }
               9:  };

            使該類支持序列化很容易,如下代碼為添加序列化功能的類聲明:

               1:  class CLine : public CObject
               2:  {
               3:  DECLARE_SERIAL (CLine)
               4:   
               5:  protected:
               6:      CPoint m_ptFrom;
               7:      CPoint m_ptTo;
               8:   
               9:  public:
              10:      CLine () {} // Required!
              11:      CLine (CPoint from, CPoint to) { m_ptFrom = from; m_ptTo = to; }
              12:      void Serialize (CArchive& ar);
              13:  };
              14:   

            重載的序列化函數(shù)如下所示:

            void CLine::Serialize (CArchive& ar)
            {
                CObject::Serialize (ar);
                if (ar.IsStoring ())
                    ar << m_ptFrom << m_ptTo;
                else // Loading, not storing
                    ar >> m_ptFrom >> m_ptTo;
            }
             

            最后在類的實現(xiàn)文件中添加下面的宏即可:

               1:  IMPLEMENT_SERIAL (CLine, CObject, 1)

            通過這些修改,這個類是完全支持可序列化的。

            久久AAAA片一区二区| 久久精品综合网| 亚洲中文字幕久久精品无码APP | 久久精品国产99国产电影网| 2021国产精品午夜久久| 久久精品女人天堂AV麻| 精品久久久无码中文字幕天天| 精品九九久久国内精品| 精品久久久久久无码专区不卡| 久久久久久毛片免费播放| 一本色道久久88精品综合| 欧洲人妻丰满av无码久久不卡| 亚洲中文久久精品无码| 欧美喷潮久久久XXXXx| 麻豆AV一区二区三区久久 | 777米奇久久最新地址| 久久国产热精品波多野结衣AV| 久久国产精品无码一区二区三区 | 久久免费精品一区二区| 丁香久久婷婷国产午夜视频| 久久精品无码一区二区三区免费 | 久久综合给久久狠狠97色 | 一极黄色视频久久网站| 亚洲AV无码1区2区久久| 国产精品九九九久久九九| 99久久www免费人成精品 | 久久国产精品一区| 99久久国产综合精品女同图片 | 久久婷婷人人澡人人爽人人爱| 久久人人爽人人人人片av| 久久久无码精品亚洲日韩蜜臀浪潮| 国产精品久久久亚洲| 久久久精品日本一区二区三区| 无码人妻久久一区二区三区| 亚洲乱亚洲乱淫久久| 久久亚洲国产精品成人AV秋霞| 99久久免费国产精品热| 欧美久久一级内射wwwwww.| 国产午夜精品理论片久久影视| 欧美午夜A∨大片久久| 久久亚洲国产欧洲精品一|