C/C++ 虚函数
虚(virtual)函数是为了实现多态,派生类可以覆写(override)基类的虚函数。
1、多态(polymorphism),即基类指针或者引用,可能指向基类对象,也可能指向派生类对象,会根据运行时具体指向的对象,来调用不同的函数。
2、如果没有多态,则什么类型的指针或者引用,就会调用什么类型的对象的函数。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | class Animal { public : // 编译时静态绑定 void print1() { printf ( "print1 parent class.\n" ); } // 虚函数,告诉编译器,运行时动态绑定。 virtual void print2() { printf ( "print2 parent class.\n" ); } virtual void print3() { printf ( "print3 parent class.\n" ); } }; class Dog: public Animal { public : void print1() { printf ( "print1 Dog class.\n" ); } void print2() { printf ( "print2 Dog class.\n" ); } }; Animal *pAni; Dog dog; pAni = &dog; pAni->print1(); pAni->print2(); pAni->print3(); 输出: print1 parent class . print2 Dog class . print3 parent class . |
3、每个包含虚函数的类(也叫虚类),都有一个虚函数表(简称虚表),表项是一个虚函数的地址。
4、如果基类是虚类,则继承类也是虚类。
5、虚类的对象最前面都是一个虚表指针,指向类的虚表。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步