上一页 1 2 3 4 5 6 ··· 16 下一页
摘要: 概述:为什么需要命名空间: 在一个给定作用域中定义的每个名字在该作用域中必须是唯一的,对庞大、复杂的应用程序而言,这个要求可能难以满足。库倾向于定义许多全局名字——主要是模板名、类型名或函数名。在使用来自多个供应商的库编写应用程序的时候,这些名字中有一些几乎不可避免地会发生冲突,这种名字冲突问题称为命名空间污染问题。 命名空间为防止名字冲突提供了更加可控的机制,命名空间能够划分全局命名空间,这样使用独立开发的库就更加容易了。一个命名空间是一个作用域,通过在命名空间内部定义库中的名字,库的作者(以及用户)可以避免全局名字固有的限制.一、命名空间的定义:命名空间定义以关键字 namespace 开 阅读全文
posted @ 2012-08-13 17:33 ForFreeDom 阅读(1374) 评论(0) 推荐(0) 编辑
摘要: 异常处理概述:通过异常我们能够将问题的检测和问题的解决分离,这样程序的问题检测部分可以不必了解如何处理问题。C++ 的异常处理中,需要由问题检测部分抛出一个对象给处理代码,通过这个对象的类型和内容,两个部分能够就出现了什么错误进行通信。一、抛出类类型的异常: 1.异常是通过抛出对象而引发的。该对象的类型决定应该激活哪个处理代码。被选中的处理代码是调用链中与该对象类型匹配且离抛出异常位置最近的那个。 2.异常以类似于将实参传递给函数的方式抛出和捕获。异常可以是可传给非引用形参的任意类型的对象,这意味着必须能够复制该类型的对象。 3.如果抛出一个数组,被抛出的对象转换为指向数组首元素的指针,类似地 阅读全文
posted @ 2012-08-10 09:55 ForFreeDom 阅读(365) 评论(0) 推荐(0) 编辑
摘要: 一、类模板成员 1.模板作用域中模板类型的引用: A.在类模板的作用域内部,可以用它的非限定名字引用该类。 B.通常,当使用类模板的名字的时候,必须指定模板形参。这一规则有个例外:在类本身的作用域内部,可以使用类模板的非限定名。例如,在默认构造函数和复制构造函数的声明中,名字 Queue 是 Queue<Type> 缩写表示。... 阅读全文
posted @ 2012-07-23 17:11 ForFreeDom 阅读(1242) 评论(0) 推荐(0) 编辑
摘要: 概述:所谓泛型编程就是以独立于任何特定类型的方式编写代码。使用泛型程序时,我们需要提供具体程序实例所操作的类型或值。第二部分中描述的标准库的容器、迭代器和算法都是泛型编程的例子。在 C++ 中,模板是泛型编程的基础。模板是创建类或函数的蓝图或公式。 一 、模板定义 1.定义函数模板: compare 的模板版本: // implem... 阅读全文
posted @ 2012-07-17 18:18 ForFreeDom 阅读(8490) 评论(0) 推荐(0) 编辑
摘要: 一、继承情况下的类作用域 1.每个类都保持着自己的作用域,在该作用域中定义了成员的名字。在继承情况下,派生类的作用域嵌套在基类作用域中。如果不能在派生类作用域中确定名字,就在外围基类作用域中查找该名字的定义。正是这种类作用域的层次嵌套使我们能够直接访问基类的成员,就好象这些成员是派生类成员一样。 2.名字查找在编译时发生:对象、引用或指针的静态类型决... 阅读全文
posted @ 2012-07-07 16:00 ForFreeDom 阅读(425) 评论(0) 推荐(0) 编辑
摘要: 一、概述:面向对象编程基于三个基本概念:数据抽象、继承和动态绑定。在 C++ 中,用类进行数据抽象,用类派生从一个类继承另一个:派生类继承基类的成员。动态绑定使编译器能够在运行时决定是使用基类中定义的函数还是派生类中定义的函数。 1.通过继承我们能够定义这样的类,它们对类型之间的关系建模,共享公共的东西,仅仅特化本质上不同的东西。 2.我们经常称因继承而相关联的类为构成了一个继承层次。其中有一个类称为根,所以其他类直接或间接继承根类。 3.在 C++ 中,基类必须指出希望派生类重写哪些函数,定义为 virtual 的函数是基类期待派生类重新定义的,基类希望派生类继承的函数不能定义为虚函数。 4 阅读全文
posted @ 2012-06-27 09:51 ForFreeDom 阅读(497) 评论(0) 推荐(0) 编辑
摘要: 这里并没不是讨论大学课程中所学的《编译原理》,只是写一些我自己对C++编译器及链接器的工作原理的理解和看法吧,以我的水平,还达不到讲解编译原理(这个很复杂,大学时几乎没学明白)。 要明白的几个概念: 1、编译:编译器对源文件进行编译,就是把源文件中的文本形式存在的源代码翻译成机器语言形式的目标文件的过程,在这个过程中,编译器会进行一系列的语法检查。如果编译通过,就会把对应的CPP转换成OBJ文... 阅读全文
posted @ 2012-06-19 18:03 ForFreeDom 阅读(561) 评论(1) 推荐(1) 编辑
摘要: 当一个实现文件(.cpp ...)编译时,预处理器(CPP)首先递归的包含头文件,形成一个保含有所有必要信息的单个源文件. 这个源文件称为 编译单元. 内部连接 如果一个名称对于它的编译单元来说是局部的, 并且在连接的时候不可能与其它编译单元中的同样的名称相冲突,则这个名称具有内部连接.即具有内部连接的名称不会被带到目标文件中. 外部连接 在一个多文件程序中,如... 阅读全文
posted @ 2012-05-28 09:58 ForFreeDom 阅读(1678) 评论(0) 推荐(0) 编辑
摘要: 一、预备知识—程序的内存分配 一个由c/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。 3、全局区... 阅读全文
posted @ 2012-05-27 23:06 ForFreeDom 阅读(484) 评论(0) 推荐(0) 编辑
摘要: 概述:C++ 允许我们重定义操作符用于类类型对象时的含义。如果需要,可以像内置转换那样使用类类型转换,将一个类型的对象隐式转换到另一类型。标准库为容器类定义了几个重载操作符。这些容器类定义了下标操作符以访问数据元素,定义了 * 和 -> 对容器迭代器解引用。这些标准库的类型具有相同的操作符,使用它们就像使用内置数组和指针一样。 一、重载操作符的定义 1.重载操作符是具有特殊名称的函... 阅读全文
posted @ 2012-05-26 09:49 ForFreeDom 阅读(1744) 评论(0) 推荐(0) 编辑
上一页 1 2 3 4 5 6 ··· 16 下一页