让对象多态自已

#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;
}
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值