class ABase
{
public:
ABase();
void GetABaseName(){std::cout << "this is ABase" << std::endl;}
};
#ifndef AFUNC_H
#define AFUNC_H
#include "abase.h"
#include "cfunc.h"
class AFunc : public ABase
{
public:
AFunc();
void GetAFuncName(){std::cout << "this is AFunc" << std::endl;}
private:
CFunc iCFunc;
};
#endif // AFUNC_H
#include "afunc.h"
AFunc::AFunc()
{
iCFunc.SetParent(this);
}
#ifndef BFUNC_H
#define BFUNC_H
#include <iostream>
#include "afunc.h"
#include "bbase.h"
#include "cfunc.h"
class BFunc
{
public:
BFunc();
~BFunc();
void Test();
private:
CFunc *m_pCFunc;
};
#endif // BFUNC_H
#include "bfunc.h"
BFunc::BFunc()
{
m_pCFunc = new CFunc;
}
BFunc::~BFunc()
{
delete m_pCFunc;
m_pCFunc = NULL;
}
void BFunc::Test()
{
((ABase*)(m_pCFunc->GetParent()))->GetABaseName();
((AFunc*)(m_pCFunc->GetParent()))->GetAFuncName();
}
#ifndef CFUNC_H
#define CFUNC_H
#include <iostream>
class CFunc
{
public:
CFunc();
void SetParent(void *pParent){m_pParent = pParent;}
void *GetParent(){return m_pParent;}
private:
void* m_pParent;
};
#endif // CFUNC_H