如何访问会员? MFC

Posted

技术标签:

【中文标题】如何访问会员? MFC【英文标题】:how to acces member? MFC 【发布时间】:2013-11-29 22:55:56 【问题描述】:

我将 A 类包含在 B 中,女巫包含在 C 中。

在 A 类中,我有一个 ExamItemStates 函数。 我可以从 B 类访问它: 声明为 Public 的 ExamItemStates 函数:

BOOL ExamItemStates(int nItem, DWORD dwStates) const;

B类头文件:

class B : public CDialogEx

    DECLARE_DYNAMIC(B)
public:
    B(CWnd* pParent = NULL);   // standard constructor
    enum  IDD = IDD_B ;
    CReportCtrl m_wndList;
protected:
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
    virtual BOOL OnInitDialog();
    DECLARE_MESSAGE_MAP()
;
//B.cpp
    void B::DoDataExchange(CDataExchange* pDX)
    
        DDX_Control(pDX, IDC_LIST1, m_wndList);
        CDialogEx::DoDataExchange(pDX);
    
    BOOL B::OnInitDialog()
    
        CDialogEx::OnInitDialog();

        if (m_wndList.ExamItemStates(2, RC_ITEM_CHECKED))
            AfxMessageBox(L"Please write correct name!");
        UpdateData(FALSE);

        return TRUE;
    

我需要从 C 类访问它。我该怎么做?

【问题讨论】:

各位大神可以解释一下否决投票吗? 这是非常基本的 C++。您的 C++ 书籍将涵盖类层次结构、访问修饰符和虚拟成员。提示:您从C 访问B 的成员就像您从B 访问CDialogEx 的成员一样。你已经实现了后者。你本质上是在问:我如何解决我已经解决的问题?这可能解释了反对票。 【参考方案1】:

尝试使用protected而不是private,方法一般应该是public:: 例如

class Foo

protected:
    int a, b;
public:
    void Method1();
;

提供你的头文件(带有类的那个)以获得更多解释。


这是一个可派生类的典型方案:

class Foo

private:
    // elements that cannot be inherited (you cannot use them in the child classes) and cannot be accessed from outside of the class
protected:
    // elements that can be inherited, but cannot be accessed from outside of the class
public:
    // elements that can be inherited and accessed outside the class
;

示例代码:

class A

protected:
    void DerivableMethod();
private:
    int AccessibleOnlyInClassA;
;

class B : public A

protected:
    void AnotherProtectedMethod();
private:
    int AccessibleOnlyInClassB;
;

class C : public B

public:
    void MethodInClasC()
    
        DerivableMethod();
    
;

【讨论】:

我解决了我的问题。请不要对我的问题投反对票,这很重要。所以我不知道如何找到问题。你能帮帮我吗? @Klasik 我无法评论你的问题,所以我在这里 - 提供所有类的代码 - 最重要的是 A 类。在那里你需要设置要保护的东西。 好的,据我所知,我必须在 A 类中将 ExamItemStates 设置为受保护。所以在 C 类中必须如何看起来像代码以及数据交换的内容......对我来说有问题,因为我无法声明数据交换在两个班级相同。你能写一些我想我会更好理解的示例代码吗? Dzienkje ;) 我明天会尝试解决它。因为今天我的大脑不工作了。

以上是关于如何访问会员? MFC的主要内容,如果未能解决你的问题,请参考以下文章

如何使用消息访问 mfc 控件?

如何访问 MFC 中的 activex 控件?

如何访问父类mfc上的变量

在 MFC 中如何从 CWinAppEx 访问 CView

如何访问 MFC 中模式对话框的项目?

如何从另一个类访问 MFC 中的对话框项?