虚函数如果被覆盖,原来的函数是直接被override掉的,也就是这个函数没了
非虚函数覆盖,原来的函数还存在,还可以通过super,索引等方式访问到
类似参数默认值机制,给类设置了一个默认值(默认函数)
class A
{
public:
void print(){ printf("A non-virtual\n"); } // 非虚函数
virtual void printV(){ printf("A virtual\n"); } // 虚函数
};
class B:public A
{
public:
void print(){ printf("B non-virtual\n"); } // 覆盖非虚函数
virtual void printV(){ printf("B virtual\n"); } // 覆盖虚函数
};
void main()
{
B b;
b.print();
b.printV();
A*pa = &b;
pa->print();
pa->printV();
}
输出:
B non-virtual
B virtual
A non-virtual
B virtual