2013-11-29 2 views
-2

У меня есть класс A, включенный в B, включенную в C.Как зарегистрироваться? MFC

В классе A У меня есть функция ExamItemStates. и я могу получить доступ к нему из класса B: Функция ExamItemStates объявлен как Public:

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. Как я могу это сделать ?

+0

Ребята может кто-нибудь объяснить, вместо того, чтобы покинуть вниз голосования? – Klasik

+0

Это очень простой C++. Ваша книга на C++ будет охватывать иерархии классов, модификаторы доступа и виртуальные члены. Подсказка: вы получаете доступ к членам 'B' от' C' так же, как вы получаете доступ к членам 'CDialogEx' 'из' B'. Вы уже реализовали последнее. Вы, по сути, спрашиваете: как решить проблему, которую я уже решил? Это может объяснить сокращение. – IInspectable

ответ

0

Попробуйте использовать 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(); 
    } 
}; 
+0

Я справился с вопросом. просьба не голосует, мой вопрос важен. поэтому я не знаю, как найти проблему. вы можете мне помочь? – Klasik

+0

@Klasik Я не могу прокомментировать ваш вопрос, поэтому я здесь - предоставьте код для всех классов - наиболее важный класс A. Здесь вы должны установить, что нужно защищать. –

+0

ОК, как я понимаю, я должен установить ExamItemStates как защищенный в классе A., так как в классе C должен выглядеть код и что с обменом данными ... есть проблема для меня, потому что я не могу объявить обмен данными в двух классах. вы можете написать код примера. Думаю, тогда я пойму лучше. – Klasik

Смежные вопросы