在Java语言中,如果类B继承类A,在A中有一个void say()方法,则在B中直接重写void say()方法即可覆写此方法。但在C++中,如果要覆写父类的一个函数,父类需将此方法定义为虚函数。
请看下面例子:
#include <iostream>
#include <cstdio>
class people{
public:
void say(){
printf("hello people.\n");
}
};
class man:public people{
public:
void say(){
printf("hello man.\n");
}
};
int main(){
people * p = new man();
p->say();
system("pause");
return 0;
}
输出结果为:
hello people.
修改一下people类,其他代码不变。
class people{
public:
virtual void say(){ //定义为虚函数
printf("hello people.\n");
}
};
输出结果为:
hello man.hello man.
纯虚函数,跟Java中的抽象函数使用差不多。
#include <iostream>
#include <cstdio>
class people{
public:
virtual void say(){ //定义为虚函数
printf("hello people.\n");
}
virtual void hear() = 0; //纯虚函数,子类必须重写这个函数
};
class man:public people{
public:
void say(){
printf("hello man.\n");
}
virtual void hear(){ //重写父类的纯虚函数
printf("hear man.\n");
}
};
int main(){
people * p = new man();
p->say();
p->hear();
system("pause");
return 0;
}
结果为:
hello man.
hear man.