虚函数、override、final

C++虚函数详解的总结:

  • 多态:使用基类指针实现多态时,需要使用虚函数。
  • override:告诉编译器此函数是重写父类中的虚函数,此时编译器就会查找父类中是否有相同签名的函数,如果父类不存,编译时就会报错。
    【注】函数的签名包括:函数名,参数列表,const属性。
  • final:阻止类的进一步派生 或 虚函数的进一步重写。

修改C++虚函数详解中的实例

 
#include<iostream>  
using namespace std;  
  
class A  
{  
public:  
    void foo()  
    {  
        printf("1\n");  
    }  
    virtual void fun()  
    {  
        printf("2\n");  
    }  
};  
class B : public A  
{  
public:  
    void foo()  //隐藏:派生类的函数屏蔽了与其同名的基类函数
    {  
        printf("3\n");  
    }  
    void fun()  //多态、覆盖
    {  
        printf("4\n");  
    }  
};  
int main(void)  
{  
    A a;  
    B b;  
    A *p = &a;  
    p->foo();  //输出1
    p->fun();  //输出2
    p = &b;
    // 修改内容    
    b.foo();    //输出3
    p->foo();  //取决于指针类型,输出1
    p->fun();  //取决于对象类型,输出4,体现了多态
    return 0;  
}

可以看出,当使用基类指针访问非虚函数时,不管基类指针指向的是子类对象还是基类对象,始终调用的是基类中的函数。

posted @ 2022-08-07 13:37  好人~  阅读(30)  评论(0编辑  收藏  举报