不解。
#include <iostream.h>
class A
{
public:
vitrual void disp()//这可用虚函数,也可不用,既然结果一样,为什么要用?
{
cout < < "class A " < <endl;
}
};
class B:public A
{
public:
void disp()
{
cout < < "class B " < <endl;
}
};
class C:public A
{
public:
void disp()
{
cout < < "class C " < <endl;
}
};
void dispall(A *p)
{
p-> disp();
};
void main()
{
A a;
B b;
C c;
a.disp();
b.disp();
c.disp();
}
基类中声明虚函数,是为了派生类此函数有多种实现,可就算不用虚函数,也可以通过对象指针的类型,来调用相对应的函数,为什么要用?
[解决办法]
这是一个典型的多态问题了
虚函数正是为了这个目的存在的。
虚函数能处理动态的对象类别,而非虚函数则不可以
看以下情况
A* pA = &c;
pA-> disp();
这个会输出
class C
原因是,这个pA指针指向的对象动态型别是C
而,如果你不使用虚函数,那么会输出
class A
因为pA的静态型别是A,而该函数并不是虚函数,所以会调用A的disp,而不是C的
如果不声明成virtual function,那么你想用一个指针来处理A,B,C三类对象,就不可能了
输出总是
class A
[解决办法]
void main()
{
A *pa = new A;
A *pb = new B;
A *pc = new C;
pa-> disp();
pb-> disp();
pc-> disp();
}