forked from PaddlePaddle/Paddle
-
Notifications
You must be signed in to change notification settings - Fork 0
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 - CPP使用
- C++的唯一定义原则:C++的每个变量,函数,类型,都应该有一个唯一定义。
- Class的布局。
- class中定义了一些数据和一些操作数据的方法,class的数据存储格式就是这些数据排列出来的样子,而方法就等价与普通的函数,只不过编译的时候会隐式传入this指针,用于访问该instance对应的其他数据。要有一个内存布局在心中。
- 模板变成的来源
- 其中一个用途是提供一些通用的容器类,比如Vector,Map等等,主要是为了让类型可以像参数一样定义和使用
用上述方法可以实现一个模板类,这是没有模板的时候的最简实现
- 其中一个用途是提供一些通用的容器类,比如Vector,Map等等,主要是为了让类型可以像参数一样定义和使用
- 令人向往的工作环境
- C++编译过程中,磁盘IO也是一个非常浪费时间的操作
- CPP 2.0的三大特性:类型带参数(模板),多重继承,异常处理

- 运行时类型识别