以下做一个对比:
#include <iostream>
using namespace std;
class A14 {
public:
int say() {
cout << "A say" << endl;
return 0;
}
};
class B14: public A14 {
public:
int say() {
cout << "B say" << endl;
return 0;
}
};
int main() {
A14 *b = new B14();
b->say();
delete b;
return 0;
}
b的声明类型和实际类型是不一致的,调用say函数实际调用的是 A14的say函数。
输出如下:
A say
然后下面是虚函数:
#include <iostream>
using namespace std;
class A14 {
public:
virtual int say() {
cout << "A say" << endl;
return 0;
}
};
class B14: public A14 {
public:
int say() {
cout << "B say" << endl;
return 0;
}
};
int main() {
A14 *b = new B14();
b->say();
delete b;
return 0;
}
这次输出如下:
B say
意思是虚函数指向的是这个对象类型的实际对象的函数,而不是父类的函数.