C++
文章平均质量分 71
涼宮こなた
smartcirno.com
展开
-
C++类继承中的构造与析构
对于以下两个类 执行以下操作: A* p = new B; delete p; p->test(); return 0; 根据我以前知道的知识,在new子类时,会先调用基类构造,再调用子类构造;在delete子类时,会先调用子类析构,再调用基类析构; 而奇怪的是,在调用子类的虚函数test时,并不会在调用前或调用后自动调用基类的test函数。 为什么构造函数和析构函数如此特殊?自动调用过程是如何实现的呢? 首先纠正一个错误:在执行new时我们可以观察到,程序会先执行基类A构造函数中的操作,再执行子原创 2021-10-27 15:36:14 · 379 阅读 · 0 评论 -
【二叉树】风格统一,简单易记的二叉树非递归遍历
二叉树递归遍历的缺点很多,函数跳转拖慢速度,二叉树深度大时还会导致爆栈。相较之下非递归遍历就没有这些问题,但网络上的三种非递归遍历代码并没有做到递归代码那种程度的风格统一,易于理解(递归遍历之间只是访问节点的位置不同,其他部分可以完全一致),因此我决定做一个简单归纳,让非递归代码也能像递归代码那样风格统一,便于记忆。 注意:我的算法与网络上的算法相比付出了额外的空间,请读者自行取舍。原创 2020-10-27 15:47:30 · 182 阅读 · 0 评论 -
C++多线程初窥
多线程的使用 线程创建 一开始我用的是pthread.h,创建了五个线程输出helloworld,玩的还挺开心,不过后来猛地在网上发现了C++11中的thread类,顿时惊为天人,这玩意太方便了,反过来看pthread.h的缺点真是不少,首先创建线程就很麻烦(命令长,参数多)。 pthread_t tid;//创建一个线程id int ret = pthread_create(tid, NULL, helloWorld, NULL); thread就很牛逼了,短短一行完事。 thread t(helloW原创 2020-10-07 23:06:16 · 134 阅读 · 0 评论 -
c++语言概念——const
什么是const const用于定义常量,对常量的一切修改操作是非法的 const的用法 const必须初始化,很好理解,不初始化又不能修改根本没有存在意义 const int a=100; a=0;//ERROR const int b;//ERROR 常量引用不能修改其引用对象,不论其引用对象是否为常量 非常量引用不能引用常量对象 int a1=1; const int a2=1; const int &b1=a1; int &b2=a2;//ERROR 和引用类似,指向常量的指针不原创 2020-05-09 00:47:28 · 207 阅读 · 0 评论 -
c++语言概念——引用
什么是引用 引用可以理解为变量的别名,外号,是隐含的指针操作 对某变量引用的操作就是对该变量的操作 引用必须初始化,一旦初始化就完成绑定,不得重新绑定或手动撤销绑定,其生命周期与其所在函数有关,与其绑定的变量无关 int a1=100; void test(void){ int a2=90; int &b1=a1;//b1是a1的别名 int &b2=a2; cout<<"a1="<<b1<<endl; b2--;/原创 2020-05-08 23:47:31 · 269 阅读 · 0 评论