#include <iostream>
using namespace std;
struct IKkk1
{
virtual void FunA1() = 0;
virtual void FunA2() = 0;
};
struct IKkk2 //由于参数顺序都一致
{
virtual void FunB1() = 0;
virtual void FunB2() = 0;
};
//书上的实现方式
class CT1 : public IKkk1,IKkk2
{
public:
CT1() { TurnFun1(); }
virtual void FunA1() { cout << "FunA1 Output!/n" << endl; }
virtual void FunA2() { cout << "FunA2 Output!/n" << endl; }
virtual void FunB1() { cout << "FunB1 Output!/n" << endl; }
virtual void FunB2() { cout << "FunB2 Output!/n" << endl; }
void TurnFun1() { m_me = this; }
void TurnFun2() { m_me = reinterpret_cast<IKkk1 *>(static_cast<IKkk2 *>(this)); } //玩得这么酷,虽然我以前就知道C++多重继承的实现方式,不过利用过来还真没试过
void ShowFun1() { m_me->FunA1(); }
void ShowFun2() { m_me->FunA2(); }
private:
IKkk1 *m_me;
};
//我自想的实现方式
class CT2 : public IKkk1
{
public:
CT2() { m_turn = true; }
virtual void FunA1() { cout << "FunA1 Output!/n" << endl; }
virtual void FunA2() { cout << "FunA2 Output!/n" << endl; }
virtual void FunB1() { cout << "FunB1 Output!/n" << endl; }
virtual void FunB2() { cout << "FunB2 Output!/n" << endl; }
void TurnFun2() { m_turn = false; }
void ShowFun1() { if (m_turn) FunA1(); else FunB1(); }
void ShowFun2() { if (m_turn) FunA2(); else FunB2(); }
private:
bool m_turn;
};
int main()
{
CT1 kao;
kao.ShowFun1 ();
kao.ShowFun2 ();
kao.TurnFun2();
kao.ShowFun1 ();
kao.ShowFun2 ();
return 0;
}