Skip to content

CPP十万个为什么

Qiao Longfei edited this page Feb 23, 2018 · 11 revisions
  • 虚函数的本质。
    • 为了在基类中调用子类的函数,虚函数实际上提供了一个虚函数指针,这个指针是运行时生成的,如果new的时候用的是子类,那么这个虚函数指针就指向子类的虚函数实现,这样就能实现父类中调用实际new的类的函数的目的了。

  • 为什么类中有一个函数是虚函数的时候,析构函数也需要是虚函数?
    • 因为基类中可以调用子类的函数,如果这个函数申请了一些资源,那么只有子类的析构函数可以释放,为了调用到子类的析构函数,基类的析构函数也只能是虚函数。

  • 在CPP中,一个类就是一个类型type
    • CPP使用按名字等价作为类型系统的基石。
    • 如果两个类型(比如class)名字不同,那么他们就是不同的类型,但是如果他们的布局相同,可以使用显示的类型转换来变换类型
    sturct A {int x;}
    sturct B {int x;}
    // A and B are different Type.
    A* a = (A*)(new B()); // this is supported

  • C++的唯一定义原则:C++的每个变量,函数,类型,都应该有一个唯一定义。

  • Class的布局。
    • class中定义了一些数据和一些操作数据的方法,class的数据存储格式就是这些数据排列出来的样子,而方法就等价与普通的函数,只不过编译的时候会隐式传入this指针,用于访问该instance对应的其他数据。要有一个内存布局在心中。

  • 模板变成的来源
    • 其中一个用途是提供一些通用的容器类,比如Vector,Map等等,主要是为了让类型可以像参数一样定义和使用 image 用上述方法可以实现一个模板类,这是没有模板的时候的最简实现

  • 令人向往的工作环境 image

  • C++编译过程中,磁盘IO也是一个非常浪费时间的操作

  • CPP 2.0的三大特性:类型带参数(模板),多重继承,异常处理

image


  • 运行时类型识别 image
Clone this wiki locally