上一页 1 ··· 9 10 11 12 13 14 15 16 17 ··· 23 下一页
摘要: 参考:http://www.cnblogs.com/itech/archive/2009/02/27/1399996.html一 虚继承1) 代码:#includeusingnamespacestd;classB{public:inti;virtualvoidvB(){cout(pB);pGD->i=10;pGD->x=20;pGD->y=30;pGD->a=40;PrintMemberAndVT(pGD);deletepGD;}6)验证代码结果:7)总结:虚继承,使公共的基类在子类中只有一份,我们看到虚继承在多重继承的基础上多了vbtable来存储到公共基类的偏移。二 阅读全文
posted @ 2012-07-15 18:19 Mr.Rico 阅读(721) 评论(0) 推荐(0)
摘要: 之前有对虚函数机制的讲解,见这先讨论是多级继承的虚函数表。首先是没有函数覆盖的情况,继承方式如下图所示:对于实例DDerive dd;其所对应的虚函数列表是:测试代码如下:View Code classBase{public:typedefvoid(Base::*Fun)();virtualvoidf(){Funq=&Base::f;cout<<"Base::f->"<<(int)*(void**)&q<<endl;}virtualvoidg(){Funq=&Base::g;cout<<" 阅读全文
posted @ 2012-07-15 17:24 Mr.Rico 阅读(670) 评论(0) 推荐(0)
摘要: C++中的虚函数机制 虚函数的定义:虚函数必须是类的非静态成员函数(且非构造函数),其访问权限是 public(可以定义为 private or proteceted, 但是对于多态来说,没有意义)。在基类的类定义中定义虚函数的一般形式:virtual 函数返回值类型 虚函数名(形参表){ 函数体 }虚函数的作用是实现动态联编,也就是在程序的运行阶段动态地选择合适的成员函数,在定义了虚函数后,可以在基类的派生类中对虚函数重新定义(形式也是:virtual 函数返回值类型 虚函数名(形参表){ 函数体 }),在派生类中重新定义的函数应与虚函数具有相同的形参个数和形参类型。以实现统一的接口,不同定 阅读全文
posted @ 2012-07-15 14:06 Mr.Rico 阅读(2128) 评论(0) 推荐(1)
摘要: 第2部分 C/C++基础知识1. C++中的基本数据类型:2. C++中的整型:3. C++中的常见常量常量按照数据类型的不同分为整型常量,浮点型常量,字符型常量,还有字符串常量,转义字符常量和地址常量。整型常量可以有二进制,八进制和十六进制三种表示形式。加上L或U来表示长整型或者无符号型。浮点型常量,float型需要添加后缀f或F。浮点数只有一种进制(十进制),所有的浮点常数都是默认为double的。字符型常量,\x表示后面的字符是十六进制数,\0表示后面的字符是八进制数。字符串常量,这个是从C中继承而来的。转义字符常量,\x,\n,\b,\r,\n地址常量4. 常量和变量的区别(1)常量的 阅读全文
posted @ 2012-07-13 14:16 Mr.Rico 阅读(352) 评论(0) 推荐(0)
摘要: 条款3:使容器里对象的拷贝操作轻量而正确STL中采用的都是拷贝对象的方式如果所有这些使STL的拷贝机制听起来很疯狂,就请重新想想。是,STL进行了大量拷贝,但它通常设计为避免不必要的对象拷贝,实际上,它也被实现为避免不必要的对象拷贝。和C和C++内建容器的行为做个对比,下面的数组:Widget w[maxNumWidgets];// 建立一个大小为maxNumWidgets的Widgets数组// 默认构造每个元素即使我们一般只使用其中的一些或者我们立刻使用从某个地方获取(比如,一个文件)的值覆盖每个默认构造的值,这也得构造maxNumWidgets个Widget对象。使用STL来代替数组,你 阅读全文
posted @ 2012-07-11 23:07 Mr.Rico 阅读(540) 评论(0) 推荐(1)
摘要: 第1讲 打磨工具 1. C++/CLI与C++是不同的 第2讲 阅读C++代码 1.核心语言与标准库 C++与C以及其他很多语言类似,区分核心语言与标准库。核心语言和标准库都是标准语言的一部分,不包含这二者的工具套件是不完整的。 二者的区别在于核心语言是自包含的。例如,有些类型是语言内建的,编译器对其提供内在的支持,而其他类型是通过内建类型来定义的,他们在标准库中声明,使用时需要通知编译器将其导入。 第3讲 整数表达式 第17讲 字符集 1. 单词计数:将单词限定为字母和类字母的字符 代码如下:View Code #include#include#include#includeusingnam 阅读全文
posted @ 2012-07-09 18:53 Mr.Rico 阅读(520) 评论(0) 推荐(1)
摘要: 第5章 lexical_cast介绍 测试代码: View Code #include#include#includeusingnamespacestd;usingnamespaceboost;voidtest1(){intx=lexical_cast("100");longy=lexical_cast("2000");floatpai=lexical_cast("3.14159e5");doublee=lexical_cast("2.71828");cout(456);cout(0.6810)(0x10)#inc 阅读全文
posted @ 2012-07-09 00:00 Mr.Rico 阅读(1365) 评论(0) 推荐(1)
摘要: 第0章 导读 第1章 Boost程序库总论 1.什么是Boost 2. 如何使用Boost 3.什么是STLprot 4.开发环境 第2章 时间与日期 1. timer库 代码如下:View Code #include#includeusingnamespacestd;usingnamespaceboost;intmain(){timert;cout#include#include#include#includeusingnamespacestd;usingnamespaceboost;intmain(){vectorv(1000000);ofstreamfs("a.txt" 阅读全文
posted @ 2012-07-06 18:11 Mr.Rico 阅读(3098) 评论(0) 推荐(1)
摘要: 第9章 优先队列与第6章FIFO结构的队列不同,优先队列中元素出队列的顺序由元素的优先级决定。从优先队列中删除元素是根据优先权高或低的次序,而不是元素进入队列的次序。可以利用堆数据结构来高效地实现优先队列。堆是一棵完全二叉树,可用8.4节所介绍的公式化描述方法来高效存储完全二叉树。在高度和重量上取得平衡的左高树很适合于用来实现优先队列。本章的内容涵盖了堆和左高树。在本章的应用部分,利用堆开发了一种复杂性为O(nlogn)的排序算法,称为堆排序。在第2章所介绍的对n个元素进行排序的算法,其复杂性均为O(n^2)。虽然第3章介绍的箱子排序和基数排序算法的运行时间为Θ(n),但算法中元素的取值必须在 阅读全文
posted @ 2012-07-04 00:10 Mr.Rico 阅读(293) 评论(0) 推荐(0)
摘要: 内存对齐常量折叠 堆栈解退(stack unwinding) 模板特化模板偏特化 模板实例化 函数对象 单一定义规则(One-Definition Rule,ODR) 自引用 对象切片(object slicing)/切割:当把一个派生类对象赋给一个基类对象时,会发生对象切割。(另外用基类对象强制转换派生类对象也会),多态的实现是通过指针和引用;而对象的转换只会造成对象切割,不能实现多态。 所有权语义(owership semantics) 破坏性复制语义(distructive copy semantics) 菱形继承 向下强制:基类到派生类的转换 向上强制:派生类到基类的转换 交叉强制:从 阅读全文
posted @ 2012-07-02 22:10 Mr.Rico 阅读(2761) 评论(0) 推荐(0)
摘要: 第8章 二叉树和其他树1. 术语:树和二叉树的术语,如高度、深度、层、根、叶子、子节点、父节点和兄弟节点。4种常用的二叉树遍历方法:前序遍历,中序遍历,后序遍历和按层遍历。2. 线性数据结构,表数据结构,层次数据结构3. 二叉树与树的根本区别4. 二叉树的特性5. 二叉树遍历方法在前三种方法中,每个节点的左子树在其右子树之前遍历。这三种遍历的区别在于对同一个节点在不同时刻进行访问。在进行前序遍历时,每个节点是在其左右子树被访问之前进行访问的;在中序遍历时,首先访问左子树,然后访问子树的根节点,最后访问右子树。在后序遍历时,当左右子树均访问完之后才访问子树的根节点。在逐层遍历过程中,按从顶层到. 阅读全文
posted @ 2012-07-02 11:23 Mr.Rico 阅读(334) 评论(0) 推荐(0)
摘要: 常量 起初读者可能认为合乎逻辑的选择是把一个const放在类里,但这不会产生预期的结果。在一个类里,const 恢复它在C中的一部分意思。 它在每个类对象里分配存储并代表一个值,这个值一旦被初始化以后就不能改变。在一个类里使用const的意思是“在这个对象声明期内,这个是一个常量”。 然而,对这个常量来讲,每个不同的对象可以含一个不同的值。 把一个内部数据类型封装在一个类里以保证用构造函数初始化,是很用的。例如 class interger{int i;public:interger(int ... 阅读全文
posted @ 2012-07-02 02:41 Mr.Rico 阅读(1013) 评论(0) 推荐(0)
摘要: 1. 初始化一个引用变量必须在定义的时候。 而所有的运算符操作都被视为赋值而不是初始化,所以引用参数的初始化必须在初始化列表中进行。 class Test{ public: Test(int val) : ref_(val){} ~Test() {} private: int & ... 阅读全文
posted @ 2012-07-02 02:36 Mr.Rico 阅读(807) 评论(0) 推荐(0)
摘要: 1、什么是static? static是C++中很常用的修饰符,它被用来控制变量的存储方式和可见性。 2、为什么要引入static? 函数内部定义的变量,在程序执行到它的定义处时,编译器为它在栈上分配空间,大家知道,函数在栈上分配的空间在此函数执行结束时会释放掉,这样就产生了一个问题: 如果想将函数中此变量的值保存至下一次调用时,如何实现? 最容易想到的方法是定义一个全局的变量,但定义为一个全局变量有许多缺点,最明显的缺点是破坏了此变量的访问范围(使得在此函数中定义的变量,不仅仅受此函数控制)。 3、什么时候用static? 需要 一个... 阅读全文
posted @ 2012-07-02 02:33 Mr.Rico 阅读(1126) 评论(0) 推荐(0)
摘要: 求两个数的最大公约数问题,即常说的GCD问题,是一个经常用到的问题。这个问题的求解最常用的方法就是辗转相除的方法。这个方法其实就是下面的一个公式:gcd(a,b)=gcd(b,a%b)记住了这个公式就很容易写出它的程序了。第一:可以采用递归的方法: unsignedgcd(unsigneda,unsignedb){if(!b)returna;if(a<b)returngcd(b,a);elsereturngcd(b,a%b);}第二:所有的递归都可以转为迭代实现: unsignedgcd2(unsigneda,unsignedb){unsignedtmp;while(b!=0){tmp= 阅读全文
posted @ 2012-07-02 02:19 Mr.Rico 阅读(309) 评论(0) 推荐(0)
上一页 1 ··· 9 10 11 12 13 14 15 16 17 ··· 23 下一页