
C++基础
架起时光机的猪猪侠
噩梦般的修行
展开
-
C++ 快排算法
快速排序, 利用了分治思想, 将问题分成细小部分, 大问题打碎成一个个小问题, 一个一个的突破处理. 快排, 现实中有一个常见的场景, 就是一群人从矮到高排列. 先拿一个人出来, 这个人作为参照, 比这个人高的全部排在后面, 比这个人矮的全部排在前面. 排完后, 以这个人为分界, 前面都是比这个人矮的, 后面的都是比这个人矮的, 所以后面只需要前面部分和后面部分自己再按照上面的方式类推地进行排序就可以了 #include <iostream> #include <stdio.h> #原创 2021-02-22 16:28:20 · 440 阅读 · 0 评论 -
static_cast,dynamic_cast,reinterpret_cast,const_cast相关
static_cast, 如何字面翻译, 静态转换, 这种转换支持基本类型间的转换. 同时会在***编译期***进行类型转换的安全检查.对于像char/int/double…这些类型的转换, static_cast没有问题. 对于非基本类型的,像用户自己构造的类, 如果想要通过子类和父类之间转换,Eg: static_cast(subClassObj), 像这种, 编译器在编译期能够检查通过;但是有一点, 当父类型向子类型转换, 编译器会报错, 这种downcast, 因为父类型不一定是子类,(反过来则..原创 2021-02-22 11:28:20 · 96 阅读 · 0 评论 -
::operator new 和new
c++中new的过程其实是分成了两个步骤来的. 1. 为需要new的对象开辟空间 2. 利用新开辟的空间来创建对象 其中为对象开辟空间的是operator new(sizeof(T)), T表示对象类型, 然后调用T的构造函数T::T(), 此时operator new的空间将用来存放改 对象 这个可以通过T重载operator new函数(虽然很多书籍是不提倡重载operator new的, 只是当验证用) , 然后在调试的时候, 给这个函数打断点, 然后在new的时候也打上断点,就可以看出来. c原创 2021-02-21 07:42:19 · 274 阅读 · 0 评论 -
简单链表实现-C++笔记
定义Node节点,使用泛型 template <class T> struct LinkedNode { LinkedNode() :value(0), next(NULL) {} LinkedNode(T v, LinkedNode* node) : value(v), next(node) {} ~LinkedNode() {} T value; LinkedNode* ...原创 2020-02-07 15:12:58 · 113 阅读 · 0 评论 -
c++析构函数之所以要变成虚函数的理由
先贴出一个小例子 #include <stdio.h> #include <string> class Packet { public: Packet() {printf("Packet construtor\n");} virtual ~Packet() {printf("Packet destrutor\n");} }; class Wrapper : public Packet { public: Wrapper() {printf("Wrapper constru原创 2020-08-01 23:10:49 · 103 阅读 · 0 评论 -
c++虚函数和虚继承
c++中,多态的实现需要虚函数,而虚函数主要包括两部分,虚函数指针和虚函数表。 基类将自己的一些函数设为虚函数,子类则需要在继承基类后,重写或者直接使用从基类的继承下来的虚函数。 基类自己会保存一份虚函数表,这个虚函数表含有指向基类虚函数的虚函数指针。当子类继承基类后,同样会将基类的虚函数表继承下来,这样子类便拥有了属于自己的一份虚函数表,如果子类重写了基类的虚函数,那虚函数表的对应的虚函数指针将会修改,指向新的重写虚函数。 c++的虚继承,当子类虚继承基类,子类会有一份虚基类表,这个虚基类表存储的..原创 2020-08-02 12:21:56 · 412 阅读 · 0 评论