发布时间:2013-01-09 12:07:57
第一部分:宏为什么要使用宏呢?因为函数的调用必须要将程序执行的顺序转移到函数所存放在内存中的某个地址,将函数的程序内容执行完后,再返回到转去执行该函数前的地方。这种转移操作要求在转去执行前要保存现场并记忆执行的地址,转回后要恢复现场,并按原来保存地址继续执行。因此,函数调用要有一定的时间和空间方面的开销,于是将影响其效率。而宏只是在预处理的地方把代码展开,不需要额外的空间和时间方面的开销,所以调用一个宏比调用一个函数更有效率。但是宏也有很多的不尽人意的地方。1、宏不能访问对象的私有成员。2、宏的定义很容易产生二意性。我们举个例子:#define square(x) (x*x)我们用一个数字去调......【阅读全文】
发布时间:2013-01-09 12:03:58
[post] 一. 华为一道面试题-1-n排序有N个大小不等的自然数(1--N),请将它们由小到大排序。 要求程序算法:时间复杂度为O(n),空间复杂度为O(1)。网上转的,一开始也没有注意到最开始的半句。 算法:N个不等的自然数1~N,排序完成后必然为1~N。所以可以一次遍历,遇到a!=i的就把a和a[a]交换。 void sort(int a[], int n){int i;int t; /*临时变量:空间复杂度O(1)*/ for (i=1; i<n+1; i++) /*时间复杂度O(n)*/{while(a!=i){t = a[a]; a[a] = a;//排......【阅读全文】
发布时间:2013-01-09 12:03:47
[post] 21. New delete 与malloc free 的联系与区别?答案:都是在堆(heap)上进行动态的内存操作。用malloc函数需要指定内存分配的字节数并且不能初始化对象,new 会自动调用对象的构造函数。delete 会调用对象的destructor,而free 不会调用对象的destructor.22. #define DOUBLE(x) x+x ,i = 5*DOUBLE(5); i 是多少?答案:i 为30。23. 有哪几种情况只能用intialization list 而不能用assignment? 答案:当类中含有const、reference 成员变量;......【阅读全文】
发布时间:2013-01-09 12:03:38
[post] 16. 关联、聚合(Aggregation)以及组合(Composition)的区别?涉及到UML中的一些概念:关联是表示两个类的一般性联系,比如“学生”和“老师”就是一种关联关系;聚合表示has-a的关系,是一种相对松散的关系,聚合类不需要对被聚合类负责,如下图所示,用空的菱形表示聚合关系: 500){this.resized=true;this.style.width=500;}" border=0>从实现的角度讲,聚合可以表示......【阅读全文】