添加指针指针、虚函数、纯虚函数、虚函数指针、虚函数表

This commit is contained in:
huihut 2018-03-29 00:56:44 +08:00
parent 717d5764e0
commit a70cd27f93

View File

@ -517,6 +517,22 @@ virtual int A() = 0;
Data vall = { 0, "Anna" };
```
### 虚函数、纯虚函数
[CSDN . C++中的虚函数、纯虚函数区别和联系](https://blog.csdn.net/u012260238/article/details/53610462)
* 类里如果声明了虚函数,这个函数是实现的,哪怕是空实现,它的作用就是为了能让这个函数在它的子类里面可以被覆盖,这样的话,这样编译器就可以使用后期绑定来达到多态了。纯虚函数只是一个接口,是个函数的声明而已,它要留到子类里去实现。
* 虚函数在子类里面也可以不重载的;但纯虚函数必须在子类去实现。
* 虚函数的类用于“实作继承”,继承接口的同时也继承了父类的实现。当然大家也可以完成自己的实现。纯虚函数关注的是接口的统一性,实现由子类完成。
* 带纯虚函数的类叫虚基类这种基类不能直接生成对象而只有被继承并重写其虚函数后才能使用。这样的类也叫抽象类。抽象类和大家口头常说的虚基类还是有区别的在C#中用abstract定义抽象类而在C++中有抽象类的概念,但是没有这个关键字。抽象类被继承后,子类可以继续是抽象类,也可以是普通类,而虚基类,是含有纯虚函数的类,它如果被继承,那么子类就必须实现虚基类里面的所有纯虚函数,其子类不能是抽象类。
### 虚函数指针、虚函数表
* 虚函数指针:在含有虚函数类的对象中,指向虚函数表
* 虚函数表:在程序只读数据段(.rodate section存放虚函数指针如果派生类实现了基类的某个虚函数则在虚表中覆盖原本基类的那个虚函数指针
### 虚继承、虚函数
#### 虚继承
@ -587,19 +603,39 @@ int main()
头文件:`#include <memory>`
##### C++98
#### C++98
```cpp
std::auto_ptr<std::string> ps (new std::string(str))
```
##### C++11
#### C++11
1. shared_ptr
2. unique_ptr
3. weak_ptr
4. auto_ptr
4. auto_ptr被c++11弃用
* Class shared_ptr 实现共享式拥有shared ownership概念。多个智能指针指向相同对象该对象和其相关资源会在“最后一个reference被销毁”时被释放。为了在结构较复杂的情景中执行上述工作标准库提供weak_ptr、bad_weak_ptr和enable_shared_from_this等辅助类。
* Class unique_ptr 实现独占式拥有exclusive ownership或严格拥有strict ownership概念保证同一时间内只有一个智能指针可以指向该对象。你可以移交拥有权。它对于避免内存泄漏resource leak——如new后忘记delete——特别有用。
##### shared_ptr
多个智能指针可以共享同一个对象,对象的最末一个拥有着有责任销毁对象,并清理与该对象相关的所有资源。
##### weak_ptr
weak_ptr 允许你共享但不拥有某对象一旦最末一个拥有该对象的智能指针失去了所有权任何weak_ptr都会自动成空empty。因此在default和copy构造函数之外weak_ptr只提供“接受一个shared_ptr”的构造函数。
##### unique_ptr
unique_ptr 是C++11才开始提供的类型是一种在异常是可以帮助避免资源泄漏的智能指针。采用独占式拥有意味着可以确保一个对象和其相应的资源同一时间只被一个pointer拥有。一旦拥有着被销毁或编程empty或开始拥有另一个对象先前拥有的那个对象就会被销毁其任何相应资源亦会被释放。
unique_ptr用于取代auto_ptr
##### auto_ptr
被c++11弃用原因是缺乏语言特性如“针对构造和赋值”的std::move语义以及其他瑕疵。
### 强制类型转换运算符