zoukankan      html  css  js  c++  java
  • 关于虚函数一些知识点整理

    虚函数之前都有一直做一些知识点记录,现在整一下

    重载overload和重写override

    重载,就是同名函数,不同参数实现的不同函数,和返回值无关

    重写,就是子类继承父类的virtual修饰的函数,重新实现函数

    都实现多态性

    被final修饰的类就不能被继承,所以被final修饰的函数不能被重写override

    虚函数表

    在32系统中,在对象声明了虚函数的会比该类没有声明虚函数多出4个字节,他的派生类也会多出4个字节,就是存储虚函数表的指针

    调用的时候通过虚函数表查询,调用虚函数。

    友元函数、构造函数、内联函数、静态函数不能声明成虚函数

    静态联编和动态联编

    • 如果是直接使用对象名字调用的虚函数,就知道是哪个类调用的虚函数,所以是静态联编
    • 如果是指针调用的话,不知道具体是哪个类,就叫动态联编。

    有些编辑器中自动就给析构函数加了virtual,为什么虚函数要被定义为虚函数

    不是不定义虚函数也会调用基类的析构函数吗?

    这只是静态联编,静态编译上面讲了,是具体对象调用,如果是动态联编,指针的析构时候只会调用基类的析构,不会调用子类的

    ClxBase *p =  new ClxDerived;
    p->DoSomething();
    delete p;
    

    如果设置析构是虚函数的情况就会都调用。

  • 相关阅读:
    CentOS 6.3 下编译Nginx(笔记整理)
    XMPP协议相关基础概念(Strophe学习笔记)
    StackMapTable format error
    hibernate的子查询
    strophe与openfire模拟的XMPP简单hello程序
    Strophe.Status的所有值
    博客园添加SyntaxHighlighter
    P5395 【模板】第二类斯特林数·行
    test20191001
    test20190829
  • 原文地址:https://www.cnblogs.com/sunnylinry/p/15103559.html
Copyright © 2011-2022 走看看