05 2012 档案
摘要:当一个实现文件(.cpp ...)编译时,预处理器(CPP)首先递归的包含头文件,形成一个保含有所有必要信息的单个源文件. 这个源文件称为 编译单元. 内部连接 如果一个名称对于它的编译单元来说是局部的, 并且在连接的时候不可能与其它编译单元中的同样的名称相冲突,则这个名称具有内部连接.即具有内部连接的名称不会被带到目标文件中. 外部连接 在一个多文件程序中,如...
阅读全文
摘要:一、预备知识—程序的内存分配 一个由c/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。 3、全局区...
阅读全文
摘要:概述:C++ 允许我们重定义操作符用于类类型对象时的含义。如果需要,可以像内置转换那样使用类类型转换,将一个类型的对象隐式转换到另一类型。标准库为容器类定义了几个重载操作符。这些容器类定义了下标操作符以访问数据元素,定义了 * 和 -> 对容器迭代器解引用。这些标准库的类型具有相同的操作符,使用它们就像使用内置数组和指针一样。 一、重载操作符的定义 1.重载操作符是具有特殊名称的函...
阅读全文
摘要:命名约定 有不少人编程时用拼音给函数或变量命名,这样做并不能说明你很爱国,却会让用此程序的人迷糊(很多南方人不懂拼音,我就不懂)。程序中的英文一般不会太复杂,用词要力求准确。匈牙利命名法是Microsoft 公司倡导的[Maguire 1993],虽然很烦琐,但用习惯了也就成了自然。没有人强迫你采用何种命名法,但有一点应该做到:自己的程序命名必须一致。 以下是我编程时采用的命名约定: (1)...
阅读全文
摘要:问:我想比较两个浮点型变量,应该怎么比较? 答:大于、小于直接比较啊。 等于最好这样: const float E = 1e-6; float f1 , f2; //…… if(fabs(f1- f2) < E) {……}---------------------------------------...
阅读全文
摘要:复制构造函数、赋值操作符和析构函数总称为复制控制。编译器自动实现这些操作,但类也可以定义自己的版本。 一、概述: 每种类型,无论是内置类型还是类类型,都对该类型对象的一组(可能为空的)操作的含义进行了定义。比如,我们可以将两个 int 值相加,运行 vector 对象的 size 操作,等等。这些操作定义了用给定类型的对象可以完成什么任务。 当定义一个新类型的时候,需要显式或隐式地指定复制、...
阅读全文
摘要:1: #include<iostream> 2: #include<string> 3: using namespace std; 4: class TEST { 5: public: 6: TEST(){ 7: cout<<"TEST()"<<endl; 8: } 9: TEST(string b){ 10: cout<<"TEST(string) "<<endl; 11: } 12: TEST(const TEST &t){ 13: ...
阅读全文
摘要:每一种语言,其变量、函数、或者对象、指针等都有其生存期,也就是作用域。这个是语言自身的最基本的一个知识,以C++为例子,说明作用域的范围: typedef string Type; Type initVal( ); class Exercise { public: typedef double Type; Type se...
阅读全文
摘要:书上和网上在很多地方都对const 的重载做了一些解释,但感觉都不是很详细。还有很多同学在不同的地方发问关于const 重载的问题,这里我又重新看了一下,做了一个简单的分析也可能有不对的地方,欢迎讨论。 所谓重载,是指允许存在多个同名函数,而这些函数的参数表不同,即函数名相同但函数的签名不同。重载并不是面向对象编程的特有属性,这是因为重载是在编译阶段实现的,编译器根据函数不同的参数表,对同名...
阅读全文
摘要:内联函数:inline 函数避免函数调用的开销 将函数指定为 inline 函数,(通常)就是将它在程序中每个调用点上“内联地”展开。假设我们将 shorterString 定义为内联函数,则调用: // find longer of two strings const string &shorterString(const string &s1, const string ...
阅读全文
摘要:下标运算符[]一直被作为数组的专有运算符来介绍,经过长年的应用,人们也早已对这个用法习以为常,视为跟每天的午餐一样稀松平常的事情。当你很遐意地写下a[0]表达式的时候,如果抽空回过头来看看标准中关于下标运算符的条款,你很可能会大吃一惊: 6.5.2.1 Array subscripting Constraints One of the expressions shall have t...
阅读全文
摘要:一、概述:类类型常被称为抽象数据类型(abstract data types)。抽象数据类型将数据(即状态)和作用于状态的操作视为一个单元。我们可以抽象地考虑类该做什么,而无须知道类如何去完成这些操作。通过类我们能够将实现和接口分离,用接口指定类所支持的操作,而实现的细节只需类的实现者了解或关心。抽象数据类型是面向对象编程和泛型编程的基础。它们用起来与内置类型一样容易和直观。 1.最简单地说,类...
阅读全文
摘要:(1)分配内存 设有定义字符型指针变量与字符数组的语句如下: char *pc ,str[100]; 则系统将为字符数组str分配100个字节的内存单元,用于存放100个字符。而系统只为指针变量pc分配4个存储单元,用于存放一个内存单元的地址。 (2)初始化赋值含义 字符数组与字符指针变量的初始化赋值形式相同,但其含义不同。例如:...
阅读全文
摘要:iostream.h为非法的输入输出流,.h的头文件是C语言格式的,由于当时还没有命名空间这个说法,所以也就不存在std这个命名空间标示符。所以用iostream.h也就用不着std或者using namespace std. iostream为标准输入输出流,它是C++规范的带有命名空间的头文件,它包含在std命名空间内。 iostream流包含cin和cout输入输出流,使用...
阅读全文
摘要://先看一些函数指针的例子// uuii.cpp : 定义控制台应用程序的入口点。// main.cpp#include "stdafx.h"#include void MyFun(int x); //这个申明也可写成:void MyFun( int ); void (*FunP)(int ); //也可申明成void(*FunP)(int x),但习惯上一般不这样。 vo...
阅读全文
摘要:一、概述: 1.因为它们实现共同的操作,所以称之为“算法”;而“泛型”指的是它们可以操作在多种容器类型上——不但可作用于 vector 或 list 这些标准库类型,还可用在内置数组类型、甚至其他类型的序列上,这些我们将在本章的后续内容中了解。自定义的容器类型只要与标准库兼容,同样可以使用这些泛型算法。解算法的最基本方法是了解该算法是否读元素、写元素或者对元素进行重新排序。...
阅读全文
摘要://数组地址以及作为函数传递带来的问题#include "stdafx.h"#include <iostream>using namespace std;void test(int a[5]);void test2(int a[5]);int _tmain(int argc, _TCHAR* argv[]){ int a[5]={1,2,3,4,5}; cout<<"sizeof a is: "<...
阅读全文
摘要:1.一些成员函数改变对象,一些成员函数不改变对象. 2.为了使成员函数的意义更加清楚,我们可在不改变对象的成员函数的函数原型中加上const说明: class Point { public: int GetX() const; int GetY() const; void SetPt (int, int); void OffsetPt (int, int); priva...
阅读全文
摘要:一、概述:关联容器和顺序容器的本质差别在于:关联容器通过键(key)存储和读取元素,而顺序容器则通过元素在容器中的位置顺序存储和访问元素。 1.关联容器(Associative containers)支持通过键来高效地查找和读取元素。两个基本的关联容器类型是 map set。map 的元素以键-值(key-value)对的形式组织:键用作元素在 map 中的索引,而值则表示...
阅读全文
摘要:一、插入操作如何影响容器的选择: 1.list 容器表示不连续的内存区域,允许向前和向后逐个遍历元素。在任何位置都可高效地 insert 或 erase 一个元素。插入或删除 list 容器中的一个元素不需要移动任何其他元素。另一方面,list 容器不支持随机访问,访问某个元素要求遍历涉及的其他元素。 2.对于 vector 容器,除了容器尾部外...
阅读全文

浙公网安备 33010602011771号