zoukankan      html  css  js  c++  java
  • C++的虚函数

    1 多态产生的背景
     希望同一个方法在派生类和基类中的行为是不同的,换句话来说,方法的行为取决于调用该方法的对象。
    2 解决多态的两种方法
     1)在派生类中重新定义基类的方法
     2)使用虚方法
    3 虚函数的定义
     拥有 Virtual 关键字的函数称之为虚函数

    virtual void Click(int id, int row, int col);
    

     经常在基类中将派生类会重新定义的方法声明为虚方法,方法在基类中被声明为虚的后,它在派生类中将自动成为虚方法。然而,在派生类声明中使用关键字virtual 来指出那些函数是虚函数也不失为一个好方法。
    4 为何需要虚析构函数
     《C++ Primer Plus(第六版)》P501
    5 有哪些函数可以成为虚函数?那些函数不可以成为虚函数?
     要成为虚函数必须满足两点,一就是这个函数依赖于对象调用,因为虚函数就是依赖于对象调用,因为虚函数是存在于虚函数表中,有一个虚函数指针指向这个虚表,所以要调用虚函数,必须通过虚函数指针,而虚函数指针是存在于对象中的。二就是这个函数必须可以取地址,因为我们的虚函数表中存放的是虚函数函数入口地址,如果函数不能寻址,就不能成为虚函数。

     所以呢,这些函数不能成为虚函数;

    1.内联函数:我们都知道内联函数只是在函数调用点将其展开,它不能产生函数符号,所以不能往虚表中存放,自然就不能成为虚函数。

    2.静态函数:定义为静态函数的函数,这个函数只和类有关系,它不完全依赖于对象调用,所以也不能成为虚函数。

    3.构造函数:都知道只有当调用了构造函数,这个对象才能产生,如果把构造函数写成虚函数,这时候我们的对象就没有办法生    成。更别说用对象去调用了。所以构造函数不能成为虚函数。

     那些函数可以成为虚函数呢?

     普通的成员方法是可以成为虚函数的

     还有析构函数,因为析构函数是为了释放对象的,所以之前我们的对象已经生成,而且析构函数可以取地址,所以可以成为虚函数。

    参考资料
    《C++ Primer Plus(第六版)》
    https://blog.csdn.net/LC98123456/article/details/81143102 作者:我爱橙

  • 相关阅读:
    几个shell自动化脚本(定期清理、磁盘空间、搜寻关键字)
    linux系统垃圾清理
    mysql出现Got error 28 from storage engine错误
    WebBindingInitializer学习
    Java多线程异步调度程序分析(二)
    自己封装的C#操作redis公共类
    Java多线程编程的常见陷阱(转)
    Java分布式优秀资源集合
    JVM GC之对象生死
    Java内存模型
  • 原文地址:https://www.cnblogs.com/Manual-Linux/p/9779221.html
Copyright © 2011-2022 走看看