虚函数virtual是在基类继承时实现多态的。
//基类里面不设置virtual虚函数
#include <iostream>
using namespace std;
class apple {
public:
void show() {
cout << "apple" << endl;
}
};
class banana : public apple {
public:
void show() {
cout << "banana" << endl;
}
};
int main() {
apple a;
a.show();
apple* b = new banana();
b->show();
delete b;
return 0;
}
基类中函数不设置为虚函数,调用了两次基类的函数。
//基类里面设置virtual虚函数
#include <iostream>
using namespace std;
class apple {
public:
virtual void show() {
cout << "apple" << endl;
}
};
class banana : public apple {
public:
void show() {
cout << "banana" << endl;
}
};
int main() {
apple a;
a.show();
apple* b = new banana();
b->show();
delete b;
return 0;
}
基类中函数设置为虚函数,根据对象类型,调用一次基类的函数,调用一次子类的函数。
virtual虚函数的使用:
函数不是虚函数,调用对应于指针类型的函数。
函数是虚函数,调用对应于指针,指向对象的函数。