zoukankan      html  css  js  c++  java
  • 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 一般成对使用

  • 相关阅读:
    pytest.mark.parametrize里面indirect参数详细解释
    linux环境安装python环境
    gitlab怎么给别人新增项目权限
    VMware虚拟机下的CentOS7如果Ping不通百度,解决办法
    ip configuration could not be reserved (no available address timeout etc.)虚拟机连接不上网卡解决办法
    虚拟机安装教程
    auto_now与auto_now_add之间的区别
    【二分答案】洛谷P2678 [NOIP2015 提高组] 跳石头/P1824 进击的奶牛/P2440木材加工/P1873 砍树
    团体程序设计天梯赛PTA L2-021点赞狂魔
    团体程序设计天梯赛PTA L2-020功夫传人
  • 原文地址:https://www.cnblogs.com/zhouzhuo/p/3739679.html
Copyright © 2011-2022 走看看