
C/C++
逃离黑洞的光子
逃离黑洞的光子
展开
-
C++中虚函数的作用是什么?它应该怎么用呢?
转自 [百度百科]一 什么是虚函数如果不知道虚函数为何物但有急切的想知道那你就应该从这里开始二 虚函数是如何做到的如果你没有看过Inside The C Object Model这本书但又急切想知道那你就应该从这里开始三 以一段代码开始虚函数联系到多态,多态联系到继承。所以本文中都是在继承层次上做文章。没了继承,什么都没得谈。下面是对C++的虚函数这玩意儿的理解。一 、 什么是虚函数(如果不知转载 2015-05-17 16:22:28 · 511 阅读 · 0 评论 -
C++细节学习之高效的位运算
基础: 左移运算符m<<n,表示把m左移n位,左移n位的时候,最左边的n为将丢掉,同时在最右边补上n个0;比如:01100010<<2=10001000右移运算符m>>n表示把m右移n位,右移时,最右边的n位将去掉,原先为正数的,在最左边补上n个0;原先为负数的,在最左边补上n个1.比如:01100010>>2=0001100010100010>>3=11110100应用: 位运算比乘除法高效原创 2015-05-23 10:17:16 · 518 阅读 · 0 评论 -
C++细节学习之小数比较和字符型加减
以前上过c/c++的课程,但由于学得比较肤浅,有比较多得偏僻知识点没掌握,C++细节学习,这个系列就是总结这些冷知识小数比较计算机表示小数会有误差,因为同一个小数转化成二进制有时是不同的,所以不能用等号判断两个小数是否相等。如果两个小数的差的绝对值很小,比如小于0.0000001,就可以认为他们相等。代码如下:boll equal(double num1,double num2)if((num1原创 2015-05-22 23:54:01 · 1250 阅读 · 0 评论 -
C++细节学习之构造函数初始化列表
构造函数初始化列表以一个冒号开始,接着是以逗号分隔的数据成员列表,每个数据成员后面跟一个放在括号中的初始化式。例如:Student Stu(int id):age(18),math(100),English(100){};构造函数分两个时段执行: 初始化阶段 普通的计算阶段 显示初始化或者默认构造函数(隐式地)使用成员数据的默认构造函数来初始化该成员 执行函数体的所有语句由此我们可知原创 2015-05-23 16:18:44 · 471 阅读 · 0 评论 -
C++细节学习之指针和const限定符
1、 指向const对象的指针 形式如右:const double *cptr; 2、 const指针 形式如右:int *const cptr=&intval; cptr只能初始化,不能再次赋值,所指向的对象的值能否修改取决于该对象的类型是否是const;原创 2015-05-23 19:23:10 · 429 阅读 · 0 评论 -
C++细节学习之const对象只能调用const函数
const对象不能改变数据成员,所以不能调用非const函数;比如:class Oneclass{ public: void ctfunc() const{} void uctfunc() {}}int onefunc(const Oneclass obj,const Oneclass *pointer,const Oneclass &reference){ obj原创 2015-06-02 10:59:34 · 581 阅读 · 0 评论 -
C++细节学习之智能指针auto_ptr和tr1::shared_ptr
为什么要用智能指针? 我们知道在C++中,资源管理是个头疼的问题。资源管理最常做的就是内存管理。而指针用起来如果忘记归还,就会导致内存泄露。 比如:class Oneclass{};int func(){ Oneclass* one=new Oneclass; if(!one)return 1; delete one; return 0;}可见,上面代码中,我原创 2015-06-01 21:34:43 · 764 阅读 · 0 评论 -
C++中placement new操作符(经典)
placement new是重载operator new的一个标准、全局的版本,它不能被自定义的版本代替(不像普通的operator new和operator delete能够被替换成用户自定义的版本)。它的原型如下:void *operator new( size_t, void *p ) throw() { return p; }首先我们区分下几个容易混淆的关键词:new、operator n转载 2015-05-31 17:26:06 · 409 阅读 · 0 评论 -
C++细节学习之类的实例化
C++的实例化跟Java和C#的不一样,Java和C#的实例化都是直接用new或getInstance()实现。但是C++使用new是返回一个指针。class Base{ public: void func(){ } private:};Base* p=new Base();原创 2015-05-28 15:48:18 · 552 阅读 · 0 评论 -
C++细节学习之non-virtual、virtual和pure virtual函数的使用区别
首先我们需要明白c++中的继承到底继承了什么? public继承中,我们可以理解为两部分:函数接口继承和函数实现继承。 函数接口相当于声明,实现相当于定义。pure virtual函数:只继承接口,实现需要我们自己去写 virtual 函数:继承接口和默认的实现,我们可以重写实现 non-virtual 函数:继承接口和强制性的实现,一般我们不该去重写non-原创 2015-05-29 19:19:23 · 1441 阅读 · 0 评论 -
回溯法之求n个集合的幂集
幂集:有一个集合A,集合A的幂集是由集合A的所有子集所组成的集合。集合中的每个元素只有两种状态:属于幂集的元素集或不属于幂集的元素集。 集合{1,2,3},用一棵二叉树来表示。 递归函数void GetPowerSet(int i,int length,int A[],int B[]){ int C[N]; memcpy(C, B, 10 * sizeof(int)); //复原创 2015-06-30 19:27:29 · 2510 阅读 · 0 评论