【M31】让函数根据一个以上的对象类型来决定如何虚化
2014-04-09 16:03
232 查看
1、考虑下面的问题,游戏软件中有角色A,B,角色又可以细化为A1,A2,A3;B1,B2,B3,两类角色之间相互攻击。即A1可以攻击B1,B2,B3,B1可以攻击A1,A2,A3。C++的多态,只根据方法拥有者的真实类型,决定调用哪个方法,而不关心形参的真实类型,只关心形参的表面类型。考虑方法A.Attack(B),如何根据A,B的真实类型虚化?
2、使用虚方法+RTTI(运行时期类型识别),在对于A的Attack方法声明为virtual,在重写的方法中,使用typeid判断B的真实类型,决定调用哪个方法。
3、只使用虚方法,在A的Attack(B)方法,调用B的AcceptAttack(A)方法,此时,AcceptAttack中的形参A表面类型就是它的真实类型。
4、自行建立虚方法表,根据A,B的真实类型指定一个方法。
2、使用虚方法+RTTI(运行时期类型识别),在对于A的Attack方法声明为virtual,在重写的方法中,使用typeid判断B的真实类型,决定调用哪个方法。
3、只使用虚方法,在A的Attack(B)方法,调用B的AcceptAttack(A)方法,此时,AcceptAttack中的形参A表面类型就是它的真实类型。
4、自行建立虚方法表,根据A,B的真实类型指定一个方法。
相关文章推荐
- 条款三十一:让函数根据一个以上的对象类型来决定如何虚化
- 技术(7)——让函数根据一个以上的对象类型来决定如何虚化
- 条款31 让函数根据一个以上的对象类型来决定如何虚化
- item31让函数根据一个以上的对象类型来决定如何虚化
- 【more effective c++读书笔记】【第5章】技术(7)——让函数根据一个以上的对象类型来决定如何虚化(2)
- 【more effective c++读书笔记】【第5章】技术(7)——让函数根据一个以上的对象类型来决定如何虚化(2)
- 【more effective c++读书笔记】【第5章】技术(7)——让函数根据一个以上的对象类型来决定如何虚化(1)
- 【more effective c++读书笔记】【第5章】技术(7)——让函数根据一个以上的对象类型来决定如何虚化(1)
- 让函数根据一个以上的对象类型来决定如何虚化
- More Effective C++ Item M31:让函数根据一个以上的对象来决定怎么虚拟
- 【C++】让函数根据一个以上的对象来决定怎么虚拟
- C++对象模型之编译器如何处理函数返回一个对象
- [iphone 开发学习笔记]Object-C和C语言最大的区别也是最大的扩展-----消息(即如何调用一个对象中的函数)
- 关于函数的返回值是一个接口类型的对象
- 如何判断一个对象是否是基本类型的Wrapper
- 如何根据基本类型(值类型)动态生成对象
- 8.9 编写函数打开文件用于输入,将文件内容读入 string 类型的 vector 容器,每一行存储为该容器对象 的一个元素。8.10 重写上面的程序,把文件中的每个单词存储为 容器的一个元素
- Js中如何判断一个对象为数组类型
- 如何将一个对象赋值给指定类型的数据?
- 虚函数,有的语言里也叫动态函数(DYNAMIC,相对于VIRTUAL),这里的虚,不是没有,而是说,调用对象的类型决定具体的函数。