Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What do these C++ code snippets do?

Tags:

c++

mfc

#ifdef _DEBUG
    #define new DEBUG_NEW
    #undef THIS_FILE
    static char THIS_FILE[] = __FILE__;
#endif

Why define these tags?

CSortHeaderCtrl::CSortHeaderCtrl()
    : m_iSortColumn( -1 )
    , m_bSortAscending( TRUE )
{
}

What are the two functions after colon used for?

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()

Are there any similar things in C# like this?

What's this used for?

virtual ~CSortHeaderCtrl();

Why set the destructor function to be virtual?

void CSortHeaderCtrl::Serialize( CArchive& ar )

When will this function be called?

Is this extended from parent?

By the way, when you want to extend a MFC class, what document you will read?

Since we don't know what function it has, what function can we override?

The following is the header file:

/* 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
like image 405
MemoryLeak Avatar asked Jul 10 '26 12:07

MemoryLeak


1 Answers

Question 1: The DEBUG_NEW is probably so the 'new' operator records some extra information about where and when a block was allocated to help in detecting memory leaks, see this. The THIS_FILE[] static char array simple holds the current filename, probably used by the debug 'new'

Question 2: This is an C++ initialization list.

Question 3: The destructor is declared virtual because there are other virtual members and this is a derived class. The 'delete' operator needs to know the correct size of the object it is deleting, along with which actual desctructor to call, see this

like image 129
jcopenha Avatar answered Jul 12 '26 01:07

jcopenha