上一页 1 ··· 20 21 22 23 24 25 26 27 28 ··· 58 下一页
  2014年3月3日
摘要: 1、隐式类型转换有两种情况:单个形参构造方法和隐式类型转换操作符。注意:隐式类型转换不是把A类型的对象a,转化为B类型的对象b,而是使用a对象构造出一个b对象,a对象并没有变化。2、单个形参构造方法包括两种情况:声明只有单个形参;或者声明有多个形参,但是除了第一形参,其他的形参都有默认值,也就是说,只要单个形参就能构造对象。 注意:默认形参必须从右向左进行。思考为什么? 调用方法的时候,从左到右使用实参初始化形参,没有提供实参,就使用默认形参值,因此默认形参必须从右向左进行。比如,有5个形参,后面三个有默认值,调用方法的时候,提供三个实参,后面两个使用默认值。3、隐式类型转换操作符,是一种.. 阅读全文
posted @ 2014-03-03 19:09 Andy Niu 阅读(304) 评论(0) 推荐(0) 编辑
摘要: 1、方法调用的方式有:像过程一样调用,嵌套调用,递归调用,回调方法。2、考虑回调方法,回调方法的典型情况是:事件驱动程序和多线程。事件驱动比如:按钮的点击事件。多线程,就是把方法传递给线程。3、考虑,一个方法同时传递给多个线程,这个方法的执行流会重叠,不可预料。举个例子,几个人同时使用一个机器加工原料,肯定乱套。因此,线程方法不同于一般的方法调用,可以认为,每个线程都有自己的调用堆栈。对于共享数据,需要进行同步控制。同时,应该避免使用局部static对象,因为一个线程的修改,其他的线程也受到影响。 阅读全文
posted @ 2014-03-03 18:41 Andy Niu 阅读(609) 评论(0) 推荐(0) 编辑
  2014年3月2日
摘要: 1、default 构造方法意味着,没有外来信息的情况下,进行初始化,构造出一个对象。对于有些对象是很合理的,比如数值之类的对象,可以初始化为0;对于指针之类的对象,初始化为null;对于集合如vector,list,可以初始化为一个空容器。2、对于有些对象,必须要有外来信息,才能构造出一个有意义的对象。比如Person,要有name才能构造出一个有意义的Person对象。3、因此,对于没有外来信息,也能合理构造出一个对象的类,必须提供default 构造方法。对于没有外来信息,不能构造出一个对象的类,不能有default构造方法。4、现在考虑,没有default构造方法,使用类会有哪些限制? 阅读全文
posted @ 2014-03-02 18:52 Andy Niu 阅读(590) 评论(0) 推荐(0) 编辑
摘要: 1、考虑下面的情况,有个方法,如下: void Print(ostream& s, const Base array[], int size) { for(int i=0; i< size; ++i) { s<<array[i]; } }2、对于Base baseArray[10]; Print(cout, baseArray, 10) 没有问题。在C++中,子类对象组成的数组,可以复制给父类的引用或者指针。数组名也可以认为是个地址。 考虑: Derived derivedArray[10]; Print(cout, derivedArray, 10) 会... 阅读全文
posted @ 2014-03-02 17:10 Andy Niu 阅读(563) 评论(0) 推荐(0) 编辑
摘要: 1、首先一点,对于海量数据处理,思路基本上是确定的,必须分块处理,然后再合并起来。2、对于每一块必须找出10个最大的数,因为第一块中10个最大数中的最小的,可能比第二块中10最大数中的最大的还要大。3、分块处理,再合并。也就是Google MapReduce 的基本思想。Google有很多的服务器,每个服务器又有很多的CPU,因此,100亿个数分成100块,每个服务器处理一块,1亿个数分成100块,每个CPU处理一块。然后再从下往上合并。注意:分块的时候,要保证块与块之间独立,没有依赖关系,否则不能完全并行处理,线程之间要互斥。另外一点,分块处理过程中,不要有副作用,也就是不要修改原数据,否则 阅读全文
posted @ 2014-03-02 15:58 Andy Niu 阅读(17796) 评论(2) 推荐(3) 编辑
摘要: 1、C语言中的转型操作符有两个问题: a、是个通用的转换操作符,也就是说,可以从一个类型转换到其他类型。通用必定是低效率和冗余的,因为要考虑很多情况。 b、在代码中,难以辨认出哪些是类型转换。2、C++提供了新式的转换操作符,有static_cast, dynamic_cast, const_cast, reinterpret_cast, 可以认为对不同的类型转换进行了细化,精确地指出意图,效率高。另外一方面,很容易在代码中辨认出这些类型转换。3、考虑,C++新式转换符的用法。 a、const_cast:去除对象的常量性。 b、dynamic_cast:用于向下转型或者跨系转型,类型必... 阅读全文
posted @ 2014-03-02 15:28 Andy Niu 阅读(241) 评论(0) 推荐(0) 编辑
摘要: 1、每当产生一个对象,必定调用构造方法。因此,禁止产生对象的做法就是,将所有的构造方法声明为private。2、只有在类的内部才可以访问private成员,有两层含义:在类的内部可以访问this的private成员,同时可以访问同类对象的private成员。3、将构造方法声明为private,只是限制了在外部调用构造方法产生对象,还是有办法可以产生对象。办法有: a、类暴露一个static方法,在static方法内部调用private构造方法,产生对象返回。 b、在类中声明友元方法,或者友元类,这样的话,就可以访问该类的private构造方法。4、考虑,只产生一个对象。该怎么办?使用友元方.. 阅读全文
posted @ 2014-03-02 11:19 Andy Niu 阅读(550) 评论(0) 推荐(0) 编辑
  2014年2月28日
摘要: extern有两层含义:表示声明和extern C1、C++分为编译期和运行期,C++是分别单独编译,编译期可认为有三个步骤:a、预编译进行文本替换,将源文件(cpp文件)生成编译单元;b、编译单元经过编译生成目标文件(obj文件);c、所有目标文件连接生成库(dll文件)或者可执行文件(exe文件)。2、在每个编译单元中,要使用一个对象,有两种方式: a、在当前把它定义出来 b、告诉编译器,我有这个东西,但是它被定义在其他的编译单元,等到连接时找到它。这就是extern的第一个用法。3、extern修饰对象,说明只是声明,对象定义在其他地方,连接的时候找到他。可以编译通过,但是,你引用的.. 阅读全文
posted @ 2014-02-28 20:21 Andy Niu 阅读(1573) 评论(0) 推荐(0) 编辑
摘要: 1、变量有三个基本要素:类型,名称,值。除了这三个要素,还包括其他内容:存储类型,作用域范围,连接类型(可见性),生存期。2、以方法为例说明,方法的类型就是去掉方法名,包括返回类型和形参表,如void (int)。名称就是方法名,方法名表示方法体代码在内存中的地址,在编译时就确定其值,因此是一个常量,这就是方法的值。方法的存储类型默认为extern,只是声明。作用域范围就是文件作用域,连接类型为extern,除非声明为static,为内链接。生存期为永久,从程序运行到程序终止。 阅读全文
posted @ 2014-02-28 19:20 Andy Niu 阅读(927) 评论(0) 推荐(0) 编辑
摘要: 1、C++的内存管理可分为以下几个部分: 栈:记录程序的执行过程。 堆:采用new,delete申请释放内存。 自由存储区:对应于C中使用malloc,free申请释放内存。 全局存储区:也叫静态存储区,存储static对象,包括全局对象,命名空间内对象,文件作用域内的static对象,类中的static对象,方法内的static对象。 常量存储区:存放文本常量。2、对于32位系统,堆可用大小为为4G,对于一般程序,可认为无限大。栈可用大小为1M,也可以人为修改。3、 1Byte = 8Bit 1Word = 2Byte 1K = 1024Byte 1M = 1024K 1G... 阅读全文
posted @ 2014-02-28 19:12 Andy Niu 阅读(285) 评论(0) 推荐(0) 编辑
上一页 1 ··· 20 21 22 23 24 25 26 27 28 ··· 58 下一页