这些C++代码片段有什么作用?

Mem*_*eak 2 c++ mfc

#ifdef _DEBUG
    #define new DEBUG_NEW
    #undef THIS_FILE
    static char THIS_FILE[] = __FILE__;
#endif
Run Code Online (Sandbox Code Playgroud)

为什么定义这些标签?

CSortHeaderCtrl::CSortHeaderCtrl()
    : m_iSortColumn( -1 )
    , m_bSortAscending( TRUE )
{
}
Run Code Online (Sandbox Code Playgroud)

冒号用于后的两个函数是什么?

BEGIN_MESSAGE_MAP(CSortHeaderCtrl, CHeaderCtrl)
    //{{AFX_MSG_MAP(CSortHeaderCtrl)
        // NOTE - the ClassWizard will add and remove mapping macros here.
    //}}AFX_MSG_MAP
END_MESSAGE_MAP()
Run Code Online (Sandbox Code Playgroud)

C#中有类似的东西吗?

这是用来做什么的?

virtual ~CSortHeaderCtrl();
Run Code Online (Sandbox Code Playgroud)

为什么将析构函数设置为虚拟?

void CSortHeaderCtrl::Serialize( CArchive& ar )
Run Code Online (Sandbox Code Playgroud)

什么时候会调用这个函数?

这是从父母延伸?

顺便说一句,当你想扩展一个MFC类时,你会读到什么文档?

既然我们不知道它有什么功能,我们可以覆盖哪些功能?

以下是头文件:

/* File: SortHeaderCtrl.h 

   Purpose:  Provides the header control, with drawing of
             the arrows, for the list control.
*/

#ifndef SORTHEADERCTRL_H
#define SORTHEADERCTRL_H

#if _MSC_VER > 1000
    #pragma once
#endif // _MSC_VER > 1000

class CSortHeaderCtrl : public
CHeaderCtrl { // Construction public:
    CSortHeaderCtrl();

    // Attributes public:

    // Operations public:

    // Overrides     // ClassWizard generated
    virtual function overrides
        //{{AFX_VIRTUAL(CSortHeaderCtrl)
        public:     virtual void Serialize(CArchive& ar);
        //}}AFX_VIRTUAL

    // Implementation public:     virtual
    ~CSortHeaderCtrl();

    void SetSortArrow( 
        const int iColumn,
        const BOOL bAscending );

        // Generated message map functions
    protected:     
        void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct );

        int m_iSortColumn;     
        BOOL m_bSortAscending;

        //{{AFX_MSG(CSortHeaderCtrl)         //
        NOTE - the ClassWizard will add and
        remove member functions here.
        //}}AFX_MSG

    DECLARE_MESSAGE_MAP() };

//{{AFX_INSERT_LOCATION}} // Microsoft
Visual C++ will insert additional
declarations immediately before the
previous line.

#endif // SORTHEADERCTRL_H
Run Code Online (Sandbox Code Playgroud)

小智 6

问题1:DEBUG_NEW可能是这样的'新'操作符记录了一些关于块被分配的位置和时间以帮助检测内存泄漏的额外信息,请参阅此内容.THIS_FILE []静态字符数组simple保存当前文件名,可能由调试'new'使用

问题2:这是一个C++初始化列表.

问题3:析构函数被声明为虚拟,因为还有其他虚拟成员,这是派生类.'delete'运算符需要知道它正在删除的对象的正确大小,以及要调用的实际析构函数,请参阅