佚名通过本文主要向大家介绍了一个类可以有多个父类,子类继承多个父类,继承多个父类,java继承多个父类,父类指针指向子类对象等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: 继承多个父类,呈现多态的时候,不能正常运行,指针如何转换
描述:
解决方案1:
解决方案2:
描述:
指针cocos2dclass多态继承
//定义
typedef void (Ref::*SEL_SCHEDULE)(float);
#define CC_SCHEDULE_SELECTOR(_SELECTOR) static_cast<cocos2d::SEL_SCHEDULE>(&_SELECTOR)
//定义类
class AbstractClass{
virtual void onAction(float dt);
};
class TMP:public Ref,public AbstractClass{
virtual void onAction(float dt);
};
//在TMP类中使用方法会出现错误。
scheduleOnce(CC_SCHEDULE_SELECTOR(TMP::onAction),0);
//scheduleOnce(static_cast<cocos2d::SEL_SCHEDULE>(&TMP::onAction),0);
TMP继承多个父类,呈现多态的时候,不能正常运行,我感觉是因为指针指向了父类 AbstractClass,而非指向TMP类,这个改如何转换指针,有没有更好的设计方法?
解决方案1:
如果就这么点代码不出错才怪
首先 AbstractClass 如果要定义成抽象类,虽然你这样写没错,但也要注意下格式
virtual void onAction(float dt) = 0; 要定义成纯虚函数。 抽象类不需要实例化,但是TMP类是必须实例化才能调用其中的函数的啊。
你的TMP就一个类,没有实例化对象那么OnAction由谁去调用。
class TMP:public Node,public AbstractClass{
virtual void onAction(float dt);
void function();
};
void TMP::function()
{
scheduleOnce(CC_SCHEDULE_SELECTOR(TMP::onAction),0);
//scheduleOnce(std::bind(&onAction, this, std::placeholder::_1), 0); //两种方法,这种方法直接指明了调用者为this
}
auto pObj = new TMP; //首先得实例化对象上面的this指针才有意义,连对象都没有何来的多态?
pObj->function();
或者
解决方案2:
全部代码?
CC_SCHEDULE_SELECTOR(TMP::onAction) 的调用者默认穿进去的是this指针,
能帮忙看一下我的问题吗?http://bbs.csdn.net/topics/391910677