在MFC(Microsoft Foundation Classes)中 afx_msg和 friend关键字

在MFC(Microsoft Foundation Classes)中,afx_msgfriend是两个关键字,用于在类声明中指定函数的属性和访问权限。下面对这两个关键字进行详细解释:

  1. afx_msg
    ``afx_msg是一个宏,用于指定一个成员函数是MFC消息映射机制的一部分。MFC消息映射机制允许通过消息处理函数来响应窗口消息,例如按钮点击、菜单选择等。在MFC中,使用afx_msg`宏来修饰消息处理函数,以便将其与消息映射机制关联起来。

    示例:

    class CMyDialog : public CDialogEx
    {
         
        // ...
        afx_msg void OnButtonClicked();
        // ...
    };
    
    BEGIN_MESSAGE_MAP(CMyDialog, CDialogEx)
        ON_BN_CLICKED(IDC_BUTTON, &CMyDialog::OnButtonClicked)
    END_MESSAGE_MAP()
    ```
    
    在上述示例中,`afx_msg`修饰的`OnButtonClicked`函数是一个按钮点击事件的消息处理函数。通过将其与ID为`IDC_BUTTON`的按钮的点击消息进行映射,可以在按钮点击时调用该函数进行处理。
    
    
  2. friend
    ``friend是一个关键字,用于声明类的友元关系。友元关系允许一个类或函数访问另一个类的私有成员。在C++中,类的私有成员默认情况下只能被类内部的成员函数访问,但通过使用friend`关键字,可以授权其他类或函数访问该类的私有成员。

    示例:

    class CMyClass
    {
         
    private:
        int m_privateData;
    
    public:
        friend class CFriendClass;
    };
    
    class CFriendClass
    {
         
    public:
        void AccessPrivateData(CMyClass& obj)
        {
         
            int data = obj.m_privateData;  // 可以访问CMyClass的私有成员
        }
    };
    ```
    
    在上述示例中,`CFriendClass`被声明为`CMyClass`的友元类。因此,在`CFriendClass`中的成员函数`AccessPrivateData`可以直接访问`CMyClass`的私有成员`m_privateData`。
    
    友元关系可以用于实现类之间的紧密协作,但需要小心使用,因为它打破了封装性和类的私有性。应该谨慎使用友元关系,确保只在必要的情况下使用,并避免滥用。
    
    

总结而言,afx_msg是一个宏,在MFC中用于指定成员函数是消息映射机制的一部分,用于响应窗口消息。friend是一个关键字,在C++中用于声明类的友元关系,允许其他类或函数访问该类的私有成员。

相关推荐

  1. C++友元函数友元类(C++ friend关键字

    2023-12-19 02:54:02       57 阅读
  2. C# checked unchecked 关键字

    2023-12-19 02:54:02       50 阅读
  3. $(this) this 关键字 jQuery 有何不同?

    2023-12-19 02:54:02       27 阅读
  4. C++friend用法

    2023-12-19 02:54:02       48 阅读
  5. C#,typeof关键字

    2023-12-19 02:54:02       62 阅读
  6. MySQL——查询使用关键字

    2023-12-19 02:54:02       23 阅读
  7. TypeScript declare module 关键字用法

    2023-12-19 02:54:02       33 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-19 02:54:02       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-19 02:54:02       106 阅读
  3. 在Django里面运行非项目文件

    2023-12-19 02:54:02       87 阅读
  4. Python语言-面向对象

    2023-12-19 02:54:02       96 阅读

热门阅读

  1. 力扣LeetCode75题

    2023-12-19 02:54:02       83 阅读
  2. Centos单用户模式修改root密码

    2023-12-19 02:54:02       57 阅读
  3. 51单片机控制1602LCD字符滚动三

    2023-12-19 02:54:02       61 阅读