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;
}

两种方法得到的都一样,为什么还要用父类指针

不建议用父类指针指向子类,尤其是父类析构函数没有声明为虚函数,采用父类指针,其生存周期结束时会自动调用父类的析构函数,而不会调用子类析构函数,子类未完全析构,造成内存泄漏。
温馨提示:内容为网友见解,仅供参考
第1个回答  2016-05-07
如果是通过对象名调用虚函数(如b.foo()),在编译阶段就能确定调用的是哪一个类的虚函数,所以属于静态联编。如果是通过基类指针调用虚函数(如a->foo()),在编译阶段无法从语句本身确定调用哪一个类的虚函数,只有运行时,a指向某一类对象后,才能确定调用的是哪一类的虚函数。故为动态关联。本回答被提问者采纳
相似回答