虚函数:在基类中加了 virtual 关键字的函数就是虚函数。
理解过程在下面代码注释中:
#include<iostream>
using namespace std;
//基类People
class People
{
public:
virtual void a(float x)
{cout<<"People::a "<<x<<endl;}
void b(float x)
{cout<<"People::b "<<x<<endl;}
void c(float x)
{cout<<"People::c "<<x<<endl;}
};
//派生类Student
class Student:public People
{
public:
virtual void a(float x)
{cout<<"Student::a "<<x<<endl;}
void b(int x)
{cout<<"Student::b "<<x<<endl;}
void c(float x)
{cout<<"Student::c "<<x<<endl;}
};
// 只有在通过基类指针或引用间接指向派生类子类型时多态性才会起作用
int main()
{
Student d;
People *people=&d; // p基类指针,p的函数调用如果有virtual
// 如果没有virtual,是正常的静态函数调用-调用基类的:输出 Peoplexxxx
// 如果有virtual,根据多态性调用派生类的:调用a函数输出 Student xxx
Student *student=&d;
// student派生类指针,s的所有函数调用都只是调用自己的函数,和多态性无关,student的所有函数调用的结果都输出Student::是正常的
people->a(1.45f); // Student::a 1.45 atttention!
student->a(1.45f); // Student::a 1.45
people->b(1.45f); // People::b 1.45
student->b(1.45f); // Student::b 1
people->c(1.45f); // People::c 1.45 atttention!
student->c(1.45f); // Student::c 1.45
return 0;
}
原文:https://www.cnblogs.com/OFSHK/p/14536996.html