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();
展开
 我来答
arongustc
科技发烧友

2017-03-23 · 智能家居/数码/手机/智能家电产品都懂点
知道大有可为答主
回答量:2.3万
采纳率:66%
帮助的人:6017万
展开全部
一个对象不可能即属于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);
(有关的在这里,不够字了...)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式