虚函数:
虚函数--类的成员函数前面加virtual关键字,则这个成员函数称为虚函数。虚函数重写--当在子类的定义了一个与父类完全相同的虚函数时,则称子类的这个函数重写(也称覆盖)了父类的这个虚函数。
#include<iostream>using namespace std;class Person{public: virtual void BuyTickets() { cout << " 买全价票" << endl; }PRotected: string _name; };class Student : public Person{public: virtual void BuyTickets() { cout << " 买半价票 " << endl; }protected: int _num;};void Fun(Person& p){ p.BuyTickets();}void Test(){ Person p; Student s; Fun(p); Fun(s);}int main(){ Test(); return 0;}多态:
所谓多态,其实就是“多种形态”。
C++中虚函数的主要作用就是实现多态。简单说父类的指针/引用调用重写的虚函数,当父类指针/引用指向父类对象时调用的是父类的虚函数,指向子类对象时调用的是子类的虚函数。
虚函数表:
虚函数表是通过一块连续内存来存储虚函数的地址。这张表解决了继承、虚函数(重写)的问题。在有虚函数的对象实例中都存在一张虚函数表,虚函数表就像一张地图,指明了实际应该调用的虚函数函数。
#include<iostream>using namespace std;class Base{public: virtual void func1() {} virtual void func2() {}private: int a;};void Test1(){ Base b1;}int main(){ Test1(); return 0;}
新闻热点
疑难解答