c++ 多态 为什么要用父类指向子类对象

classA{public:virtualvoidfoo(){printf("aa1\n");}virtualvoidfun(){printf("aa2\n");}};c... class A
{
public:

virtual void foo()

{

printf("aa1\n");

}

virtual void fun()

{

printf("aa2\n");

}
};
class B : public A
{
public:

void foo()

{

printf("bb3\n");

}

void fun()

{

printf("bb4\n");

}
};
int main(void)
{

B b;

A *a = &b;

while(1)

{

int control;

scanf("%d",&control);

switch (control) {

case 1:

a->foo();

break;

case 2:

b.foo();

break;

default:

break;

}

}

return 0;
}

两种方法得到的都一样,为什么还要用父类指针
展开
 我来答
hoskenwang
2016-05-06 · TA获得超过559个赞
知道答主
回答量:22
采纳率:0%
帮助的人:15.1万
展开全部
不建议用父类指针指向子类,尤其是父类析构函数没有声明为虚函数,采用父类指针,其生存周期结束时会自动调用父类的析构函数,而不会调用子类析构函数,子类未完全析构,造成内存泄漏。
夜黑黎
2016-05-07 · TA获得超过324个赞
知道小有建树答主
回答量:188
采纳率:0%
帮助的人:148万
展开全部
如果是通过对象名调用虚函数(如b.foo()),在编译阶段就能确定调用的是哪一个类的虚函数,所以属于静态联编。如果是通过基类指针调用虚函数(如a->foo()),在编译阶段无法从语句本身确定调用哪一个类的虚函数,只有运行时,a指向某一类对象后,才能确定调用的是哪一类的虚函数。故为动态关联。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式