亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

MFC類庫之CArray作為函數參數和返回值

發布時間:2020-07-25 08:39:35 來源:網絡 閱讀:1612 作者:驛落黃昏 欄目:移動開發

 一、獲得返回值:

 
可以作為函數的一個參數
比如定義fun(CArray<int, int &> &array)
采用引用類型,就可以直接使用 
 
二、作為函數參數:
 
#include<Afxtempl.h> 
//定義函數。
void ansnode(int num,CArray<double,double&> m_adX, CArray<double,double&> m_adY,                                  CArray<double,double&> m_adZ);  
函數體:
void ansysdata::ansnode(int num,CArray<double,double&> *m_adX, CArray<double,double&> *m_adY, CArray<double,double&> *m_adZ)
{
       double x, y,z; int i;
       fstream infilex;
       fstream infiley;
       fstream infilez;
       infilex.open("d:/intface/M_ADX.TXT.txt",ios::in); 
       infiley.open("d:/intface/M_ADX.TXT.txt",ios::in); 
       infilez.open("d:/intface/M_ADX.TXT.txt",ios::in); 
       for (i=0;i<num;i++)
       {
           infilex>>x;
           infiley>>y;
           infilez>>z;
           m_adX.Add(x);
           m_adY.Add(y); 
           m_adZ.Add(z);
       }
       fstream outfilex;
       fstream outfiley;
       fstream outfilez;
       outfilex.open("d:/intface/M_ADX1.TXT.txt",ios::in); 
       outfiley.open("d:/intface/M_ADX2.TXT.txt",ios::in); 
       outfilez.open("d:/intface/M_ADX3.TXT.txt",ios::in); 
 
       for (i=0;i<num;i++)
      {
          outfilex<<m_adX.GetAt(i)<<endl; 
          outfiley<<m_adY.GetAt(i)<<endl;
          outfilez<<m_adZ.GetAt(i)<<endl;
       }
}
 
三、CArray結構體中的應用
 
struct DriverItem 
     CString strDriverName; 
     CString strProductDescribe; 
     CString strTBLFileName; 
}; 
struct ControlItem 
      CString strControlType; 
      CArray <DriverItem,DriverItem&> DriverArray; 
};
 
 
 
四、CArray的簡單說明
 
CArray <Object,Object> Var1;
CArray <Object,Object&> Var2;
第一個參數是CArray的返回的參數,第二個參數是傳遞給CArray的參數。即,當使用第二種形式定義Carray數組時,使用Add()時是一個引用類型的參數。
 
 
五、轉帖
最近一直在編寫一個繪圖程序,為了保存多個double型點坐標,這里我采用了定義集合類CArray<TYPE, ARG_TYPE>CPointDArray來保存多點,然后定義坐標轉換函數ConvertToXYs(CPointDArray,long* xy),將double坐標轉換為long型坐標,這是就出現幾種常見錯誤,"CPointDArray缺少構造函數,或者是拷貝構造函數不存在”,‘不能將參數 1 從“CArray<TYPE,ARG_TYPE>”轉換為“CArray<TYPE,ARG_TYPE>”,從這兩個問題入手,舉例說明問題。
 
  下面代碼為我修改多次后總結的一個實例,照著此方法可以推廣:
1.建立一個VC6工程 ,在CTestView中,添加一個OnLButtonDown,在這里實現點的繪制。
2.在CTestView.h中,自定義double類型的點類以及數組
class CPointD
{
 
public:
    double x; //longtitude
    double y; //latitude
    CPointD()
    { 
       x =0;
       y=0;
     };
     CPointD(const double dx,double dy)
    {
        x = dx;
        y = dy;
     };
     CPointD(const CPointD& pnt)
    {
         x = pnt.x;
         y = pnt.y;
     };
     CPointD& operator=(const CPointD& rhs)
     {
         if (this == &rhs)
         {
             return *this;
          }
          x = rhs.x;
          y = rhs.y;
          return *this;
     }
};//double 型指針鏈表
typedef CArray<CPointD,CPointD>CPointDArray; //double 型數組
typedef CArray<POINT,POINT&>LPointArray;//long型數組
 
注意這里CArray<CPointD,CPointD>可以用CArray<CPointD*,CPointD*>,實驗證明沒有問題。
 
3.在視圖類CTestView定義全局變量CPointDArray plist;
 
定義函數void ConvToXYs(const CPointDArray &alist, LPointArray& llist);//&alist為常應用,保存函數中不修改數據,&llist是alist轉
 
//換成long后的數組。這里就是出現上述常見問題的癥結。
 
下面為實現部分
 
void CTestLineView::ConvToXYs(const CPointDArray &alist, LPointArray& llist)
{
     if (alist.GetSize()>0)
     {
          llist.RemoveAll();
          int i ;
          int n = alist.GetSize();
          llist.SetSize(n);
 
          double jing, wei;
          for(i=0;i<n;i++)
          {
               CPointD p = alist.GetAt(i);
               jing = p.x;
               wei = p.y;
               llist[i].x = (long)(jing+0.5);//這是關鍵步驟,可以當數組用
               llist[i].y = (long)(wei+0.5);//
          }
 
4.在鼠標左鍵事件中實現繪制:
 
void CTestLineView::OnLButtonDown(UINT nFlags, CPoint point) 
{
 
        CClientDC pDC(this); try
       {
             CPen* pOldPen = (CPen*)pDC.SelectStockObject(2);
 
            for (int i=0;i<10;i++)
           {
               // CPointD *p=new CPointD(i*3.5f,i*5.5f);
               plist.Add(CPointD(i*3.5f,i*5.5f));
            }
 
             LPointArray longpoints;
            ConvToXYs(plist,longpoints);
            pDC.Polyline(longpoints.GetData(),plist.GetSize());
           CString str;
           str.Format("%d",longpoints.GetSize());
           AfxMessageBox(str,MB_OK);
           // Restore the original device context objects.
 
          pDC.SelectObject(pOldPen);
         }
catch (CException* e)
{
    LPTSTR lp="" ;
    e->GetErrorMessage(lp,250);
    AfxMessageBox(lp);
}
 
CView::OnLButtonDown(nFlags, point);
}
最后在~CTestLineView中清除plist。
 
CTestLineView::~CTestLineView()
{
    if(plist.GetSize())
    plist.RemoveAll();
}
 
大概就這么多了,通過學習,希望能夠給大家一個思路,將來能夠很嫻熟的應用CArray。
http://blog.csdn.net/eattonton/article/details/5278540
向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

东乌| 彭山县| 永善县| 新宾| 大冶市| 繁峙县| 正宁县| 郑州市| 镇沅| 嵊州市| 天等县| 土默特左旗| 修文县| 洪洞县| 临邑县| 庆云县| 砚山县| 昌宁县| 阿合奇县| 和顺县| 卢湾区| 抚州市| 齐河县| 平远县| 海阳市| 安阳县| 乌审旗| 阿尔山市| 汽车| 海口市| 双辽市| 灵台县| 平顶山市| 德惠市| 若尔盖县| 上蔡县| 称多县| 阳信县| 渭南市| 乌拉特前旗| 六盘水市|