![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
【C++ primer】
雪天飞山狐狸
吃饱穿暖活下来
展开
-
开始回顾C/C++
离开C、C++技术开发的时间大概有近一年了,趁着工作没有忙到夸张,找时间抓紧回顾和温习。编译环境: Dev-C++ 4.9.9.2技术对象:C++ Primer 中文版 >主要工作: 基础知识的整理整体知识点的回顾和总结相关技术点代码的调试重点用法的归纳原创 2012-09-21 15:51:10 · 577 阅读 · 0 评论 -
第五章 表达式(part2) 自增和自减、箭头、条件、sizeof 、逗号 操作符
5.5. 自增和自减操作符自增(++)和自减(--)操作符为对象加1或减1操作提供了方便简短的实现方式。它们有前置和后置两种使用形式。到目前为止,我们已经使用过前自增操作,该操作使其操作数加1,操作结果是修改后的值。同理,前自减操作使其操作数减 1。这两种操作符的后置形式同样对其操作数加 1(或减 1),但操作后产生操作数原来的、未修改的值作为表达式的结果: int i原创 2012-09-24 15:15:42 · 1176 阅读 · 0 评论 -
第12章 类 (part3) 友元函数 & static 类成员
12.5. 友元在某些情况下,允许特定的非成员函数访问一个类的私有成员,同时仍然阻止一般的访问,这是很方便做到的。例如,被重载的操作符,如输入或输出操作符,经常需要访问类的私有数据成员。这些操作符不可能为类的成员,具体原因参见第十四章。然而,尽管不是类的成员,它们仍是类的“接口的组成部分”。友元机制允许一个类将对其非公有成员的访问权授予指定的函数或类。友元的声明以关键字 frien原创 2012-10-08 17:05:37 · 1723 阅读 · 0 评论 -
第12章 类 (part1) 类的定义和声明 & 类隐含的 this 指针
在 C++ 中,用类来定义自己的抽象数据类型(abstract data types)。12.1. 类的定义和声明从第一章开始,程序中就已经使用了类。已经用过的标准库类型,比如 vector,istream 和 string,都是类类型。还定义了一些简单的类,如 Sales_item 和 TextQuery 类。为了扼要重述,再来看年 Sales_item 类:class Sale原创 2012-10-08 15:22:27 · 882 阅读 · 0 评论 -
第七章 函数(part6) 重载函数
出现在相同作用域中的两个函数,如果具有相同的名字而形参表不同,则称为重载函数。使用某种程序设计语言编写过算术表达式的程序员都肯定使用过重载函数。表达式 1+3调用了针对整型操作数加法操作符,而表达式 1.0 + 3.0调用了另外一个专门处理浮点操作数的不同的加法操作。根据操作数的类型来区分不同的操作,并应用适当的操作,是编译器的责任,而不是程序员的事情。类似地原创 2012-09-26 09:26:31 · 648 阅读 · 0 评论 -
第二章 变量和基本类型
类型是所有程序的基础。类型告诉我们数据代表什么意思以及可以对数据执行哪些操作。C++ 语言定义了几种基本类型:字符型、整型、浮点型等。C++ 还提供了可用于自定义数据类型的机制,标准库正是利用这些机制定义了许多更复杂的类型,比如可变长字符串string、vector 等。此外,我们还能修改已有的类型以形成复合类型。类型确定了数据和操作在程序中的意义。C++ 中对类型的支持是非常原创 2012-09-22 12:57:55 · 871 阅读 · 0 评论 -
第七章 函数(part1) 函数的定义
7.1. 函数的定义函数由函数名以及一组操作数类型唯一地表示。函数的操作数,也即形参,在一对圆括号中声明,形参与形参之间以逗号分隔。函数执行的运算在一个称为函数体的块语句中定义。每一个函数都有一个相关联的返回类型。考虑下面的例子,这个函数用来求出两个 int 型数的最大公约数: // return the greatest common divisor int原创 2012-09-25 16:17:51 · 728 阅读 · 0 评论 -
第五章 表达式(part3) 复合表达式的求值、new 和 delete 表达式、类型转换
5.10. 复合表达式的求值含有两个或更多操作符的表达式称为复合表达式。在复合表达式中,操作数和操作符的结合方式决定了整个表达式的值。表达式的结果会因为操作符和操作数的分组结合方式的不同而不同。操作数的分组结合方式取决于操作符的优先级和结合性。也就是说,优先级和结合性决定了表达式的哪个部分用作哪个操作符的操作数。如果程序员不想考虑这些规则,可以在复合表达式中使用圆括号强制实原创 2012-09-24 20:29:56 · 874 阅读 · 0 评论 -
第12章 类 (part2) 类作用域 & 类的构造函数
12.3. 类作用域每个类都定义了自己的新作用域和唯一的类型。在类的定义体内声明类成员,将成员名引入类的作用域。两个不同的类具有两个的类作用域。:即使两个类具有完全相同的成员列表,它们也是不同的类型。每个类的成员不同于任何其他类(或任何其他作用域)的成员。例如 class First { public: int memi; double mem原创 2012-10-08 16:08:30 · 838 阅读 · 0 评论 -
第六章 语句
空语句如果在程序的某个地方,语法上需要一个语句,但逻辑上并不需要,此时应该使用空语句。这种用法常见于在循环条件判断部分就能完成全部循环工作的情况。例如,下面程序从输入流中读取数据,在获得某个特殊值前无需作任何操作: // read until we hit end-of-file or find an input equal to sought while (cin原创 2012-09-25 15:50:30 · 862 阅读 · 0 评论 -
第五章 表达式(part1) 算术、关系、逻辑、位、赋值
5.1. 算术操作符表 5.1 按优先级来对操作符进行分组——一元操作符优先级最高,其次是乘、除操作,接着是二元的加、减法操作。高优先级的操作符要比低优先级的结合得更紧密。这些算术操作符都是左结合,这就意味着当操作符的优先级相同时,这些操作符从左向右依次与操作数结合。表 5.1. 算术操作符Operator操作符Functio原创 2012-09-24 15:05:40 · 1108 阅读 · 0 评论 -
第七章 函数(part3) return 语句 & 函数声明
7.3. return 语句return 语句用于结束当前正在执行的函数,并将控制权返回给调用此函数的函数。return 语句有两种形式: return; return expression;7.3.1. 没有返回值的函数不带返回值的 return 语句只能用于返回类型为 void 的函数。在返回类型为 void 的函数中,return 返回语句不是必需原创 2012-09-25 20:14:07 · 896 阅读 · 0 评论 -
第二章 变量和基本类型(续2) 引用 & typedef
2.5. 引用引用就是对象的另一个名字。在实际程序中,引用主要用作函数的形式参数。引用是一种复合类型,通过在变量名前添加“&”符号来定义。复合类型是指用其他类型定义的类型。在引用的情况下,每一种引用类型都“关联到”某一其他类型。不能定义引用类型的引用,但可以定义任何其他类型的引用。引用必须用与该引用同类型的对象初始化: int ival = 1024;原创 2012-09-22 14:48:39 · 622 阅读 · 0 评论 -
C++中相对路径与绝对路径以及斜杠与反斜杠的区别
文件路径 正斜杠和反斜杠正斜杠,又称左斜杠,符号是"/";反斜杠,也称右斜杠,符号是"\"。文件路径的表示可以分为绝对路径和相对路径:1、绝对路径表示相对容易,例如pDummyFile =fopen("D:\\vctest\\glTexture\\texture\\dummy.bmp", "rb"); 给出了从盘符开始的全部路径,这里需要注意的是“\”要用双斜线"\\",vc工程默认访转载 2013-06-28 15:42:20 · 739 阅读 · 0 评论 -
C++ 虚函数表解析
C++ 虚函数表解析 陈皓http://blog.csdn.net/haoel 前言 C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,R转载 2013-10-30 10:49:21 · 583 阅读 · 0 评论 -
超级博客 C++学习
点击打开链接转载 2014-06-13 16:41:26 · 660 阅读 · 0 评论 -
C/C++获取当前系统时间
点击打开链接转载 2014-06-13 16:42:45 · 630 阅读 · 0 评论 -
VC 双缓冲绘图
在图形图象处理编程过程中,双缓冲是一种基本的技术。我们知道,如果窗体在响应WM_PAINT消息的时候要进行复杂的图形处理,那么窗体在重绘时由于过频的刷新而引起闪烁现象。解决这一问题的有效方法就是双缓冲技术。 因为窗体在刷新时,总要有一个擦除原来图象的过程OnEraseBkgnd,它利用背景色填充窗体绘图区,然后在调用新的绘图代码进行重绘,这样一擦一写造成了图象颜色的反差。当WM_PA转载 2015-07-30 09:51:35 · 575 阅读 · 0 评论 -
第二章 变量和基本类型(续3)类类型 & 编写自己头文件
2.8. 类类型C++ 中,通过定义类来自定义数据类型。类定义了该类型的对象包含的数据和该类型的对象可以执行的操作。标准库类型string、istream和ostream都定义成类。C++对类的支持非常丰富——事实上,定义类是如此重要,后续会陆续全部用来描述 C++ 对类及类操作的支持。类定义以关键字 class 开始,其后是该类的名字标识符。类体位于花括号里面。花括号后面原创 2012-09-22 15:16:44 · 566 阅读 · 0 评论 -
第七章 函数(part2) 参数传递
每次调用函数时,都会重新创建该函数所有的形参,此时所传递的实参将会初始化对应的形参。:形参的初始化与变量的初始化一样:如果形参具有非引用类型,则复制实参的值,如果形参为引用类型,则它只是实参的别名。7.2.1. 非引用形参普通的非引用类型的参数通过复制对应的实参实现初始化。当用实参副本初始化形参时,函数并没有访问调用所传递的实参本身,因此不会修改实参原创 2012-09-25 17:29:16 · 702 阅读 · 0 评论 -
第七章 函数(part4) 局部对象 & 内联函数
7.5. 局部对象在 C++ 语言中,每个名字都有作用域,而每个对象都有生命期。要弄清楚函数是怎么运行的,理解这两个概念十分重要。名字的作用域指的是知道该名字的程序文本区。对象的生命期则是在程序执行过程中对象存在的时间。在函数中定义的形参和变量的名字只位于函数的作用域中:这些名字只在函数体中可见。通常,变量名从声明或定义的地方开始到包围它的作用域结束处都是可用的。原创 2012-09-25 20:24:00 · 631 阅读 · 0 评论 -
第七章 函数(part5) 类的成员函数
7.7. 类的成员函数成员函数的定义与普通函数的定义类似。和任何函数一样,成员函数也包含下面四个部分:函数返回类型。函数名。用逗号隔开的形参表(也可能是空的)。包含在一对花括号里面的函数体。正如我们知道的,前面三部分组成函数原型。函数原型定义了所有和函数相关的类型信息:函数返回类型是什么、函数的名字、应该给这个函数传递什么类型的实参。函数原型原创 2012-09-26 09:12:08 · 782 阅读 · 0 评论 -
第二章 变量和基本类型 (续1) 变量 & const 限定符
2.3. 变量关键概念:强静态类型C++ 是一门静态类型语言,在编译时会作类型检查。在大多数语言中,对象的类型限制了对象可以执行的操作。如果某种类型不支持某种操作,那么这种类型的对象也就不能执行该操作。在 C++ 中,操作是否合法是在编译时检查的。当编写表达式时,编译器检查表达式中的对象是否按该对象的类型定义的使用方式使用。如果不是的话,那么编译器会提示错误,而不产生可执行文件原创 2012-09-22 14:26:13 · 768 阅读 · 0 评论 -
第七章 函数(part7) 指向函数的指针
7.9. 指向函数的指针函数指针是指指向函数而非指向对象的指针。像其他指针一样,函数指针也指向某个特定的类型。函数类型由其返回类型以及形参表确定,而与函数名无关: // pf points to function returning bool that takes two const string references bool (*pf)(const string原创 2012-09-26 09:41:03 · 489 阅读 · 0 评论 -
第13章 复制控制 (part2) 消息处理示例
13.4. 消息处理示例有些类为了做一些工作需要对复制进行控制。为了给出这样的例子,我们将概略定义两个类,这两个类可用于邮件处理应用程序。Message 类和 Folder 类分别表示电子邮件(或其他)消息和消息所出现的目录,一个给定消息可以出现在多个目录中。Message 上有 save 和 remove 操作,用于在指定 Folder 中保存或删除该消息。对每个 Mes原创 2012-10-09 16:46:53 · 621 阅读 · 0 评论 -
第13章 复制控制 (part1) 复制构造函数 & 赋值操作符 & 析构函数
每种类型,无论是内置类型还是类类型,都对该类型对象的一组(可能为空的)操作的含义进行了定义。比如,我们可以将两个 int 值相加,运行 vector 对象的 size 操作,等等。这些操作定义了用给定类型的对象可以完成什么任务。每种类型还定义了创建该类型的对象时会发生什么——构造函数定义了该类类型对象的初始化。类型还能控制复制、赋值或撤销该类型的对象时会发生什么——类通过特殊的成员函数:复原创 2012-10-09 16:27:00 · 709 阅读 · 0 评论 -
第三章 标准库类型(part 1) 标准库 string 类型
除基本数据类型外,C++ 还定义了一个内容丰富的抽象数据类型标准库。其中最重要的标准库类型是 string 和 vector,它们分别定义了大小可变的字符串和集合。string 和 vector 往往将迭代器用作配套类型(companion type),用于访问string 中的字符,或者vector 中的元素。这些标准库类型是语言组成部分中更基本的那些数据类型(如数组和指针)的抽象。原创 2012-09-22 19:36:37 · 572 阅读 · 0 评论 -
第三章 标准库类型(part 2) 标准库 vector 类型
3.3. 标准库 vector 类型vector 是同一种类型的对象的集合,每个对象都有一个对应的整数索引值。和 string 对象一样,标准库将负责管理与存储元素相关的内存。我们把 vector 称为容器,是因为它可以包含其他对象。一个容器中的所有对象都必须是同一种类型的。使用 vector 之前,必须包含相应的头文件。假设已作了相应的 using 声明: #includ原创 2012-09-23 09:33:04 · 555 阅读 · 0 评论 -
第三章 标准库类型(part 3) 迭代器
3.4. 迭代器简介除了使用下标来访问 vector 对象的元素外,标准库还提供了另一种访问元素的方法:使用迭代器(iterator)。迭代器是一种检查容器内元素并遍历元素的数据类型。 标准库为每一种标准容器(包括vector)定义了一种迭代器类型。迭代器类型提供了比下标操作更通用化的方法:所有的标准库容器都定义了相应的迭代器类型,而只有少数的容器支持下标操作。因为原创 2012-09-23 09:55:16 · 469 阅读 · 0 评论 -
第三章 标准库类型(part 4) 标准库 bitset
3.5. 标准库 bitset有些程序要处理二进制位的有序集,每个位可能包含 0(关)1(开)值。位是用来保存一组项或条件的 yes/no 信息(有时也称标志)的简洁方法。标准库提供的bitset 类简化了位集的处理。要使用bitset 类就必须包含相关的头文件。在本书提供的例子中,假设都使用std::bitset 的 using 声明: #include us原创 2012-09-23 10:28:33 · 454 阅读 · 0 评论 -
第三章 标准库类型(part 5) 总结 & 常用术语
C++ 标准库定义了几种更高级的抽象数据类型,包括 string 和 vector 类型。string 类型提供了变长的字符串,而vector 类型则可用于管理同一类型的对象集合。迭代器实现了对存储于容器中对象的间接访问。迭代器可以用于访问和遍历 string 类型和 vectors 类型的元素。下一章将介绍 C++ 的内置数据类型:数组和指针。这两种类型提供了类似于 vect原创 2012-09-23 10:42:09 · 439 阅读 · 0 评论 -
第四章 数组和指针 (part1) 数组
概述:C++ 语言提供了两种类似于 vector 和迭代器类型的低级复合类型——数组和指针。与 vector 类型相似,数组也可以保存某种类型的一组对象;而它们的区别在于,数组的长度是固定的。数组一经创建,就不允许添加新的元素。指针则可以像迭代器一样用于遍历和检查数组中的元素。现代 C++ 程序应尽量使用 vector 和迭代器类型,而避免使用低级的数组和指针。设计良好的程序只原创 2012-09-23 11:22:05 · 621 阅读 · 0 评论 -
第四章 数组和指针 (part2) 引入指针
vector 的遍历可使用下标或迭代器实现,同理,也可用下标或指针来遍历数组。指针是指向某种类型对象的复合数据类型,是用于数组的迭代器:指向数组中的一个元素。在指向数组元素的指针上使用解引用操作符 *(dereference operator)和自增操作符 ++(increment operator),与在迭代器上的用法类似。对指针进行解引用操作,可获得该指针所指对象的值。而当指针原创 2012-09-23 15:47:05 · 688 阅读 · 0 评论 -
第四章 数组和指针 (part3) C 风格字符串
:尽管 C++ 支持 C 风格字符串,但不应该在 C++ 程序中使用这个类型。C 风格字符串常常带来许多错误,是导致大量安全问题的根源。字符串字面值的类型就是 const char 类型的数组。C++ 从 C 语言继承下来的一种通用结构是C 风格字符串,而字符串字面值就是该类型的实例。实际上,C 风格字符串既不能确切地归结为 C 语言的类型,也不能归结为 C++ 语言的类型,而是以空字原创 2012-09-23 17:26:39 · 1199 阅读 · 0 评论 -
第四章 数组和指针 (part4) 多维数组
严格地说,C++ 中没有多维数组,通常所指的多维数组其实就是数组的数组: // array of size 3, each element is an array of ints of size 4 int ia[3][4];在使用多维数组时,记住这一点有利于理解其应用。如果数组的元素又是数组,则称为二维数组,其每一维对应一原创 2012-09-24 09:39:18 · 513 阅读 · 0 评论 -
第四章 数组和指针(part5) 总结 & 常用术语
本章介绍了数组和指针。数组和指针所提供的功能类似于标准库的 vector 类与string 类和相关的迭代器所提供。我们可以把vector 类型理解为更灵活、更容易管理的数组,同样,string 是 C 风格字符串的改进类型,而 C 风格字符串是以空字符结束的字符数组。迭代器和指针都能用于间接地访问所指向的对象。vector 类型所包含的元素通过迭代器来操纵,类似地,指针则用于访问数组元素。尽原创 2012-09-24 10:33:03 · 476 阅读 · 0 评论 -
第一章
1、内置类型:如int型等有C++语言定义的类型2、调用GNU或微软编译器程序编写完成后需要进行编译,如何进行编译,与具体的操作系统和编译器有关。需要查看参考手册或者了解所用到的编译器的工作细节.调用C++编译器的命令因编译器和操作系统的不同而不同,常用的编译器是GNU编译器和微软的Visual Studio,调用GNU编译器的默认命令是g++: $ g++ prog1.cc -o原创 2012-09-22 10:32:05 · 510 阅读 · 0 评论 -
VC 绘图,使用双缓冲技术实现
********************所有的GDI绘图函数使用的都是逻辑坐标(逻辑范围)**************************************系统默认情况下 物理范围和逻辑范围 是1:1 的对应关系*******************1. 首先定义类成员:CDC *m_pDC;CDC MemDC;CBitmap MemBitmap;CBitma转载 2015-07-30 09:51:07 · 835 阅读 · 0 评论