Как получить доступ к частной виртуальной функции в базовом классе - PullRequest
0 голосов
/ 22 июля 2011
class BaseClass
{
    virtual void g()
    {
        cout<<"BaseClass:g()"<<endl;
    }
private:
    virtual void f()
    {
        cout<<"BaseClass:f()"<<endl;
    }
};

class DeriveClass:public BaseClass
{
    virtual void g()
    {
        cout<<"DeriveClass:g()"<<endl;
    }
private:
    virtual void h()
    {
        cout<<"DeriveClass:h()"<<endl;
    }
};


typedef void (*Fun)(void) ;
int _tmain(int argc, _TCHAR* argv[])
{
    DeriveClass b;
    Fun pFun;
    for(int i = 0; i<3; ++i)//why the variable is 3?
    {
        pFun = (Fun)*((int*)*(int*)(&b)+i);// I don't know this?
        pFun();
    }
    system("pause");
    return 0;
}

Ответы [ 2 ]

1 голос
/ 22 июля 2011

Моя точка зрения состоит в том, что использование техники кодирования "C" с "C ++" ориентированным объектным программированием очень грязно.

Если вам нужен доступ к члену класса, отметьте его как открытый.

Функция _tmain обращается к вашим 3 методам через указатель метода.

0 голосов
/ 28 июля 2011

Это вопрос, чтобы понять, понимаете ли вы VTABLE.

Это руководство http://www.learncpp.com/cpp-tutorial/125-the-virtual-table/ не только использует этот пример кода, но и объясняет ответ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...