c++中从父类类型变量调用子类方法 一个父类A,有方法f(),子类B,C,D继承于A
c++中从父类类型变量调用子类方法一个父类A,有方法f(),子类B,C,D继承于A,并且都覆盖了f(),如果声明一个Aa;并且随机赋值A,B,C,D中某一个的实例,那么怎...
c++中从父类类型变量调用子类方法
一个父类A,有方法f(),子类B,C,D继承于A,并且都覆盖了f(),如果声明一个A a;并且随机赋值A,B,C,D中某一个的实例,那么怎么能保证既能调用A的f(),又可以调用B,C,D的f()?
(我是直接调用,但发现父类可以,子类就会崩溃)
我用了一个list<A>来装实例,用迭代器调用时就会崩溃
但即使是不用list,B b(...);A a=b;a.f();
这种情况下,a.f();依旧是调用到了A::f(); 展开
一个父类A,有方法f(),子类B,C,D继承于A,并且都覆盖了f(),如果声明一个A a;并且随机赋值A,B,C,D中某一个的实例,那么怎么能保证既能调用A的f(),又可以调用B,C,D的f()?
(我是直接调用,但发现父类可以,子类就会崩溃)
我用了一个list<A>来装实例,用迭代器调用时就会崩溃
但即使是不用list,B b(...);A a=b;a.f();
这种情况下,a.f();依旧是调用到了A::f(); 展开
2个回答
展开全部
一个对象不可能即属于B也属于C和D的,因此你不可能调用所有这些类的f,你必须确保当你调用那个函数时,对应的对象必须是属于那个类的对象,否则当然会崩溃
更多追问追答
追问
不好意思,没说清楚,我的意思是a变量里面可能为A,B,C,D中任意一个的实例,怎么写,可以保证调用a的f()时调用当前类的f()
比如:a里面是B的实例,那么a.f()就是调用B::f()
追答
只要你把f声明为虚函数即可啊?每个教科书都会讲吧?
从你楼下的回答看你已经这么做了,这样说它崩溃不是因为没有调用正确的函数,而是调用正确函数后导致错误了,你需要自己调试一下
例如,一个窗口被创建后还不一定满足绘制的要求,你需要研究正确的处理窗口的方法
2017-03-23
展开全部
具体的例子代码是怎样的呢
~~~~~~~~~~
~~~~~~~~~~
追问
class Dialog:public UIControl
{
public:
virtual void render(Canvas*);
}
class UIControl
{
public:
virtual void render(Canvas*);
}
UIControl* uic=newDialog(...);
uic->render(c);
(有关的在这里,不够字了...)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询