• C++ 基础问题


    1. 虚函数

    虚函数是在某个基类声明为virtual并在一个或多个派生类中重新定义的成员函数。虚函数是C++多态的基础,通过指向类的指针或引用调用,调用的方式是动态联编,到运行时才确定

    调用的是该虚函数的哪一个实现。非虚函数是静态联编,在编译时刻系统就能根据指针类型确定调用的函数。

    虚函数一般会有一个默认实现,还有一种函数叫做纯虚函数,纯虚函数可以只声明不定义,带有纯虚函数的类不能实例化,相当于JAVA中的接口。

    2. 虚函数的实现

    一旦某个类中含有虚函数,编译器会在该类的实例中插入一个指针,指向虚函数表。虚函数表的作用就是保存自己类中虚函数的地址,我们可以将虚函数表看出一个数组,数组中的每一个元素存放的是虚函数的地址,一个虚函数可能会有多种实现,虚函数表中记录的是继承序列中,最接近该子类的那个。被重写的虚函数会在虚函数表中得到更新。

    假如某个子类有n个父类,那么他就有n个虚函数表。

    3. 虚继承

    c++允许多重继承,但多重继承可能会出现菱形继承。菱形继承的问题在于子类调用某个成员变量时会出现歧义。为了解决这个问题,c++基础虚继承的概念,即虚基类的实例只在子类中保存一个实体。这个实体有虚基类的虚函数表和变量,放在子类实例最下面的位置。

    4. static, const, extern 的特性

    static 的一个特性是隐藏,static修饰的函数或变量在其他文件是不可见的。

    static修饰的成员变量和成员函数属于整个类,而独立于类的实例。对于每一个静态成员只存储一份供所有类的实例使用。

    const 修饰的变量,默认是隐藏,可通过 extern修饰使得全局可见。编译器通常不为普通 const 常量分配存储空间,而是将他们保持在符号表中,这使它成为编译期间的一个常量,存储不需要内存操作,所以效率比较高。

    5. malloc free, new delete 的异同

    都可以分配,回收空间

    new是类型安全的, int *p = new float[2] 能检测出错误。

    new 调用构造函数, delete 调用析构函数

    malloc 返回指向 void* 类型, 一般需要类型转换

    malloc, free, new delete 一般成对使用

  • 相关阅读:
    java实现微信红包分配算法
    认识J2SE
    java设计模式(2)
    java设计模式(1)
    模拟做饭系统(java+线程中的join方法)
    学习接水系统(java+thread线程)
    1. linux系统简介
    Codeforces Round #350 (Div. 2)解题报告
    2014蓝桥杯决赛解题报告
    末学者笔记--Python函数一玄
  • 原文地址:https://www.cnblogs.com/zhouzhuo/p/3739679.html
Copyright © 2020-2023  润新知