摘要:
1、考虑为什么? 首先,#define不是语言的一部分,而是预编译过程。也就是在编译器编译之前,进行文本替换。考虑#define Pi 3.1425;在编译之前,Pi都会被文本替换为3.1415,因此编译器看不到Pi这个标识。这会增加调试难度。同时文本替换导致目标码中出现多份3.1415。2、尽量不使用#define,就要使用替代办法。3、对于#define Pi 3.1415这样形式,使用const替换const double Pi = 3011415;以const替换#define,有两个特殊情况: a、定义常量指针,使用两个const,限制指向对象不能修改,指向不能修改; b、cl... 阅读全文
posted @ 2014-01-08 19:45
Andy Niu
阅读(307)
评论(0)
推荐(0)
摘要:
1、C++是个多重范型编程语言:面向过程,面向对象,函数编程,泛型形式,元编程形式。2、C++是一个语言联邦,包括四个次语言: a、C语言,C++以C语言为基础。但C语言有下列局限:没有模版,没有异常,没有过载。 b、面向对象C++,包括继承,封装,多态,抽象。 c、Template C++,泛型编程,可以生成代码的代码。 d、STL,标准库容器,迭代器,算法,方法对象。 阅读全文
posted @ 2014-01-08 19:12
Andy Niu
阅读(278)
评论(0)
推荐(0)
摘要:
1、为什么要以对象管理资源,它解决什么问题? 考虑下面的需求,客户需要一个动态分配的资源。我提供一个工厂方法,返回一个指针,指向资源。那么问题来了,谁来释放资源呢?只有客户知道什么时候不再使用资源,因此,应该是客户负责释放资源。如果客户没有成功释放资源,造成资源泄漏,注意,这里泄漏的资源不光是一块内存,还可能包括这块内存保存的其他资源。把成功释放资源的希望,寄托在客户身上,显然是不靠谱的。因为:a、客户可能忘记delete;b、代码异常,导致没有执行到delete。2、它是如何解决这个问题的? 我们知道,栈上分配的对象有个特点,超出作用域,不管什么情况,都会自动调用析构方法。因此,可以把堆.. 阅读全文
posted @ 2014-01-08 19:04
Andy Niu
阅读(243)
评论(0)
推荐(0)
摘要:
1、变量三要素:类型,名称,值。定义变量的时候,提供初始值,定义时指定了初始值的对象称为已初始化的。C++支持两种初始化形式:直接初始化,赋值初始化。如下: int ival(1024); // 直接初始化 int ival = 1024; // 赋值初始化2、初始化与赋值是两个概念。初始化:创建对象时赋给初始值。赋值:擦除对象的当前值,并用新值代替。因此,判断是初始化还是赋值的关键是,看看对象当前是否已经存在值了。3、初始化调用copy构造方法,赋值调用copy复制操作符。 阅读全文
posted @ 2014-01-08 18:28
Andy Niu
阅读(512)
评论(0)
推荐(0)
浙公网安备 33010602011771号