在 C++ 中,使用 virtual 关键字 修饰的 函数 被称为虚函数,虚函数对于 多态 具有决定性的作用,有虚函数才能构成多态。
什么时候需要将函数声明为虚函数,首先看 成员函数 所在的类是否会作为基类。然后看成员函数在类的继承后有无可能被更改功能,如果希望更改其功能的,一般应该将它声明为虚函数。
如果成员函数在类被继承后功能不需修改,或派生类用不到该函数,则不要把它声明为虚函数。
C++ 虚函数的使用
#include <iostream>
#include <cstring>
using namespace std;
//Person类
class Person
{
public:
Person(string name, int age):m_name(name),m_age(age)
{
}
virtual void info()
{
cout << "Call Person info, Name = " << this->m_name << " Age = " << this->m_age << endl;
}
protected:
string m_name;
int m_age;
};
class Student:public Person
{
public:
Student(string name, int age, float score):Person(name, age),m_score(score)
{
}
virtual void info()
{
cout << "Call Student info, Name = " << this->m_name << " Age = " << this->m_age << " Score = " << m_score << endl;
}
protected:
float m_score;
};
int main()
{
cout << "嗨客网(www.haicoder.net)\n" << endl;
Person *person = new Person("HaiCoder", 18);
person->info();
person = new Student("HaiCoder", 18, 99);
person->info();
return 0;
}
程序运行后,控制台输出如下:
因为,我们不同的子类需要实现不同的 info 函数,所以,我们必须将 info 函数声明为虚函数,不然,没办法通过子类对象指向父类成员时,访问子类对象的 info 方法。
在 C++ 中,使用 virtual 关键字修饰的函数被称为虚函数,虚函数对于多态具有决定性的作用,有虚函数才能构成多态。
什么时候需要将函数声明为虚函数,首先看成员函数所在的类是否会作为基类。然后看成员函数在类的继承后有无可能被更改功能,如果希望更改其功能的,一般应该将它声明为虚函数。
如果成员函数在类被继承后功能不需修改,或派生类用不到该函数,则不要把它声明为虚函数。