摘要: ---恢复内容开始---1、C的效率 在C中,保持效率的一个方法是使用宏(macro)。宏的实现是用预处理器而不是编译器。预处理器直接用宏代码代替宏调用,所以就没有参数压栈、生成汇编语言的CALL、返回参数、执行汇编语言的RETURN等的开销。2、C ++中宏存在的问题 2.1 不是函数调用,隐藏了难以发现的错误。优先级等等问题#define FLOOR(x,b) x>=b?0:1if(FLOOR(a&0x0F,0x07)) //……if(a&0x0F>=0x07?0:1)#define FLOOR(x,b) ((x)>=(b)?0:1) 2.2 预处理器不允 阅读全文
posted @ 2013-03-27 20:29 wiessharling 阅读(235) 评论(0) 推荐(0)
摘要: 8.3 传递和返回地址 事实上,无论什么时候传递一个地址给一个函数,都应该尽可能用const修饰它。如果不这么样做,就不能以const指针参数的方式使用这个函数。 看下面的例子:// const_reference.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"void t(int*){}void u(const int* cip){ //*cip = 2; *cip can't be modified int i = *cip; //int* ip2 = cip; non-const}const char* v(){ re... 阅读全文
posted @ 2013-03-27 20:00 wiessharling 阅读(171) 评论(0) 推荐(0)
摘要: 函数参数和返回值1、传递const 如果函数参数是按值传递,可用指定的参数是const的。void fun(const int i){ i++;//error const i means can't be change}当调用函数fun()时,i为原变量的副本,这个副本在函数fun内不可被修改。2、返回const值 对返回值来讲,如果一个函数的返回值是一个常量: const int f(); 这就约定了函数框架里的原变量是不会被修改。另外,因为只是按值返回的,所以这个变量被被制成副本。对于内部类型来说,按值返回的是不是一个const,是无关紧要的,所以按值返回一个内部类型时,应该... 阅读全文
posted @ 2013-03-27 14:17 wiessharling 阅读(455) 评论(0) 推荐(0)
摘要: 多态性 (polymorphism) 是面向对象编程的基本特征之一。而在 C++ 中,多态性通过虚函数 (virtual function) 来实现。我们来看一段简单的代码:#include <iostream>using namespace std;class Base{int a;public:virtual void fun1() {cout<<"Base::fun1()"<<endl;}virtual void fun2() {cout<<"Base::fun2()"<<endl;}vi 阅读全文
posted @ 2013-03-27 10:14 wiessharling 阅读(261) 评论(0) 推荐(0)
摘要: 复制构造函数(直接初始化、复制初始化、赋值、临时对象)使用复制构造函数前应弄清的几个问题:何时调用复制构造函数,复制构造函数有何功能,为什么要定义自已的复制构造函数。1.复制构造函数:当用户没有定义自已的复制构造函数时系统将生成一个默认的复制构造函数。当按值传递对象时,就会创建一个形参的临时对象,然后调用复制构造函数把临时对象的值复制给实参。2.默认复制构造函数的功能:将一个对象的非静态成员的值逐个复制给另一个对象,注意复制的是成员的值,这种复制方式也称为浅复制。因为静态成员属于整个类,而不属于某个对象,所以调用复制构造函数时静态成员不会受到影响。3.何时生成临时对象: 情形1:按值传递对象. 阅读全文
posted @ 2013-03-27 09:32 wiessharling 阅读(338) 评论(0) 推荐(0)