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

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

  1. afx_msg

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

    示例:

    cpp 复制代码
    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`关键字,可以授权其他类或函数访问该类的私有成员。

    示例:

    cpp 复制代码
    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++中用于声明类的友元关系,允许其他类或函数访问该类的私有成员。

相关推荐
「QT(C++)开发工程师」6 小时前
C++ 11 常用for循环
开发语言·c++
我还记得那天6 小时前
0 初识C++
开发语言·c++
「QT(C++)开发工程师」8 小时前
C++ std::move 详解
开发语言·c++
豆沙沙包?10 小时前
C++~~~set容器、map容器(p57-P69)
开发语言·c++
qeen8711 小时前
【数据结构】哈希表的C++实现与封装
数据结构·c++·散列表·哈希表
乐观勇敢坚强的老彭12 小时前
C++信奥GESP四级的常见题型和解题模板速查表
开发语言·c++
欧特克_Glodon13 小时前
OpenCV计算机视觉开发入门与实践<二十二>:图像平滑之线性滤波
c++·人工智能·opencv·计算机视觉
沙盘客13 小时前
AFSIM 示例解读(09)· 传感器全家桶 sensor_demos(下):ESM / SAR / 被动测向
c++·经验分享·后端
大鹏的NLP博客13 小时前
WSL2 资源治理:从 ONNX Runtime CUDA 编译 OOM 到 `.wslconfig` 防御配置
c++·深度学习·onnx runtime