摘要: 为了实现与数据类型无关的编程,模板应运而生: 模板定义以关键字template开始,后跟模板参数列表,这是一个逗号分隔的一个或多个模板参数的列表,用小于号(<)和大于号(>)包围起来。当使用模板时,我们隐式或者显式地指定模板实参,将其绑定到模板参数上。(建议都显式指定)。 类型参数前必须使用clas 阅读全文
posted @ 2017-03-17 16:34 Crystal_Guang 阅读(823) 评论(0) 推荐(0) 编辑
摘要: 面试题的常客: NOTE: 动态分配了内存,要记得释放,还要,这个代码虽然完成了要求,但是鲁棒性还不够,因为我没有判断给出的数据是否合理分布在数字0-9.或者字符0-9,实际开发中需要做个限定。 阅读全文
posted @ 2017-03-17 10:55 Crystal_Guang 阅读(282) 评论(0) 推荐(0) 编辑
摘要: 将10进制转换成2进制,是除以2得到的余数,再倒序排列,这可以用递归实现,也可以用数据结构——栈实现。 先看递归实现: 递归的实现方式,需要一定的逻辑性,如果把上述的打印函数和递归调用调换位置,输出将反向。这里对于递归的基础知识不做解释,如果忘记了,查询相关资料。 这里用递归能够很好的实现把最后求出 阅读全文
posted @ 2017-03-16 15:47 Crystal_Guang 阅读(456) 评论(0) 推荐(0) 编辑
摘要: 在一个虚函数的声明语句的分号前加上 =0;就可以将一个虚函数变成纯虚函数,其中,=0只能出现在类内部的虚函数声明语句处。纯虚函数只用声明,而不用定义,其存在就是为了提供接口,含有纯虚函数的类是抽象基类。我们不能直接创建一个抽象基类的对象,但可以创建其指针或者引用。值得注意的是,你也可以为纯虚函数提供 阅读全文
posted @ 2017-03-16 10:52 Crystal_Guang 阅读(6585) 评论(1) 推荐(0) 编辑
摘要: 只要是指针,就要符合指针的运算方式,不管你是不是类指针; 如果子类在继承了父类之后,没有增加属性,那么此时他们的步长一致,如果子类增加了属性那么子类的步长将大于父类。 eg: 阅读全文
posted @ 2017-03-15 08:59 Crystal_Guang 阅读(346) 评论(0) 推荐(0) 编辑
摘要: 腾讯一道面试题:50个台阶,可以一次走一个台阶,也可以一次走两个台阶,那么走到50个台阶时,有多少种可能? 分析: 任何算法的背后,都隐藏着一个数学理论的支撑,所以大家都知道,数学是进阶算法的基石。 这道题,我们先从最基本的分析,找规律,假设可能情况为an,不难发现,a1=1,a2=2,a3=3,a 阅读全文
posted @ 2017-03-14 14:15 Crystal_Guang 阅读(3668) 评论(0) 推荐(0) 编辑
摘要: 之前做过一个测试,在一个类中定义一个virtual修饰的函数时,sizeof这个类,发现类的大小多了恰好一个指针的字节大小,当初不明白,只是记住有这么一个特性。后来,发现它就是c++编译器给我们添加的vptr指针。 当类中声明虚函数时,编译器会在类中生成一个虚函数表; 虚函数表是一个存储成员函数指针 阅读全文
posted @ 2017-03-14 10:49 Crystal_Guang 阅读(4855) 评论(0) 推荐(0) 编辑
摘要: 上面的算法可以达到目的,备注也比较清晰了,但这属于基础级。 我们要翻转,首先要数据分离,求得输入数字的位数,求输入数字位数就是一个简单的分离,而我们要想使用最后的数据,又需要结合。 下面展示一个同样达到效果的程序,出自GF之手(^(* ̄(oo) ̄)^); 这份代码非常简洁的完成了要求,倒序输出,但却 阅读全文
posted @ 2017-03-13 19:08 Crystal_Guang 阅读(429) 评论(0) 推荐(0) 编辑
摘要: 二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列。 在最坏的情况下,查找10次,2^10=1024; Analyze: 阅读全文
posted @ 2017-03-11 16:10 Crystal_Guang 阅读(331) 评论(0) 推荐(0) 编辑
摘要: 函数重载: 必须在同一个类中进行; 子类无法重载父类的函数,父类同名函数将被子类名称覆盖; 重载是在编译期间根据参数类型和个数决定函数的调用(静态联编)。 函数重写与重定义: 重写: 必须发生在基类和派生类之间,并且父类与子类的函数必须有完全相同的函数原型; 使用virtual关键字声明之后能够产生 阅读全文
posted @ 2017-03-11 13:57 Crystal_Guang 阅读(862) 评论(0) 推荐(0) 编辑
摘要: 先看代码: 这样是没问题的(c++编译器会以构造相反的顺序执行析构函数),但是,在很多时候,我们不能在调用函数末尾就delete掉这个内存,还需要和后续交互。比如作为函数参数,为了实现多态,我们函数参数是父类的指针,所以更常见和一般的设计思维是更改paly和main函数如下: 运行结果显示内存泄漏了 阅读全文
posted @ 2017-03-11 11:55 Crystal_Guang 阅读(351) 评论(0) 推荐(0) 编辑
摘要: 先看一个例子: 然后我们引进多态,看看代码升级的威力; 用多态的好处:调用一个函数,简化代码结构,关键在于可维护性好。如果现在我又派生了一个类L3,只用调用函数的接口,就可以仅仅增加一个类定义的情况下,完成项目的维护。 实现多态三要素: 1、要有public继承; 2、要有虚函数重写; 3、要有基类 阅读全文
posted @ 2017-03-10 09:50 Crystal_Guang 阅读(341) 评论(0) 推荐(0) 编辑
摘要: 输出: 很奇怪,为什么在子进程中调用父进程的PID会是1224,而parent明明是3973啊,有点晕。 为了追踪代码进程,我在上述代码最后加了一个while(1)循环,不加还好,加了之后更晕了。 输出: 啊,为什么又对了啊,加了一个循环阻塞之后,子进程中调用父进程的PID显示和parent一样了。 阅读全文
posted @ 2017-03-09 16:01 Crystal_Guang 阅读(453) 评论(0) 推荐(1) 编辑
摘要: 图一 图二 先测试图一结构的多继承: 虚继承的目的是令某个类做出声明,承诺愿意共享它的基类。其中,共享的基类对象称为虚基类。在这种机制下,无论虚基类在继承体系中出现多少次,在派生类中都只包含唯一一个共享的虚基类对象。 为了说明情况,我们把上述代码更改如下: 1 #include<iostream> 阅读全文
posted @ 2017-03-06 20:25 Crystal_Guang 阅读(16874) 评论(0) 推荐(1) 编辑
摘要: 上诉代码,如果直接使用子类对象调用子类的某个和父类同名函数或者使用同名变量,默认使用子类的,但我们可以加上域作用符强制使用父类的属性或者方法。 同名函数再探: 当且仅当对通过引用或者指针调用虚函数时,才会在运行时解析该调用,也只有在这种情况下对象的动态类型才有可能与静态类型不同。 一旦某个函数被声明 阅读全文
posted @ 2017-03-05 15:34 Crystal_Guang 阅读(733) 评论(0) 推荐(0) 编辑