一杯清酒邀明月
天下本无事,庸人扰之而烦耳。
摘要: 迭代器(iterator)是一种功能非常有限,却非常实用的函数,提供一些基本操作符。其是个所谓的智能指针,具有遍历复杂数据结构的能力。 实例:迭代器指针应用 1 #include <iostream> 2 #include <string> 3 #include <vector> 4 //迭代器it 阅读全文
posted @ 2023-08-18 15:40 一杯清酒邀明月 阅读(37) 评论(0) 推荐(0) 编辑
摘要: C++标准库提供的向量(vector)类型从根本上解决了数组先天不足的问题(内存固定,如果不用那么多内存编译器也会为其分配) 我们用不着对一个向量能容纳多少元素做出限定,因为向量可以动态地随着你往它里面添加元素而无限增大。还可以用它的size()方法查知某给定向量的当前长度(即包含的元素个数);用p 阅读全文
posted @ 2023-08-18 15:39 一杯清酒邀明月 阅读(38) 评论(0) 推荐(0) 编辑
摘要: 内联函数从源代码层看,有函数的结构,而在编译后,却不具备函数的性质。编译时类似宏替换,使用函数体替换调用处的函数名。(在程序中,调用其函数时,该函数在编译时被替换,而不是像一般函数那样是在运行时被调用) 实例:栈 1 #include <iostream> 2 #include <string> 3 阅读全文
posted @ 2023-08-18 15:39 一杯清酒邀明月 阅读(39) 评论(0) 推荐(0) 编辑
摘要: 类模板与函数模板非常相似,同样是先由你编写一个类的模板,再由编译器在你第一次使用这个模板时生成的实际代码。 实例:栈的出入栈 1 #include <iostream> 2 #include <string> 3 4 template <class T> 5 class Stack//栈类 6 { 阅读全文
posted @ 2023-08-18 15:38 一杯清酒邀明月 阅读(25) 评论(0) 推荐(0) 编辑
摘要: 泛型编程技术支持程序员创建函数和类的蓝图(即模板,template),而不是具体的函数和类。 标准模板库STL(Standard Template Library),STL库是泛型编程技术的经典之作,它包含了许多非常有用的数据类型和算法。 当拥有一个模板时,编译器将根据模板自动创建一个函数,该函数会 阅读全文
posted @ 2023-08-18 15:37 一杯清酒邀明月 阅读(74) 评论(0) 推荐(0) 编辑
摘要: 1 header.h文件 2 3 #ifndef HEADER_H 4 #define HEADER_H 5 6 unsigned long returnFactorial(unsigned short num); 7 static const unsigned short headerNum = 阅读全文
posted @ 2023-08-18 15:36 一杯清酒邀明月 阅读(21) 评论(0) 推荐(0) 编辑
摘要: 与作用域有关的另一个概念是链接,当同时编译多个文件时,每个源文件被称为一个翻译单元,在某一个翻译单元里定义的东西在另一个翻译单元里使用正是链接发挥作用的地方。 存储类(storage class):每个变量都有一个存储类,它决定着程序将把变量的值储存在计算机的什么地方、如何存储、以及变量应该有怎样的 阅读全文
posted @ 2023-08-18 15:36 一杯清酒邀明月 阅读(23) 评论(0) 推荐(0) 编辑
摘要: 命名空间其实就是由用户定义的范围,同一个命名空间里的东西只要在这个命名空间里具有独一无二的名字就行了。 例如: 1 namespace author 2 3 { 4 5 std::string person; 6 7 } 8 9 namespace programmer 10 11 { 12 13 阅读全文
posted @ 2023-08-18 15:33 一杯清酒邀明月 阅读(39) 评论(0) 推荐(0) 编辑
摘要: 利用C++预处理器,我们可以让头文件只在这个类还没有被声明过的情况下才声明它。作为一种固定模式,这里使用常量名通常与相应的文件名保持一致(换成大写),把句号替换为下划线。例如rational.h文件对应RATIONAL_H 1 Rational.h文件 2 3 //Ration.h 4 //Crea 阅读全文
posted @ 2023-08-18 15:31 一杯清酒邀明月 阅读(22) 评论(0) 推荐(0) 编辑
摘要: 模块化:把程序划分成多个组成部分(即所谓的模块)。这是通过把程序代码分散到多个文件里,等编译程序时再把那些文件重新组合在一起实现的。 C++预处理器的#include指令提供了一种能够让编译器在编译主程序时把其他文件的内容包括进来的机制。例如用这个指令来包括iostream头文件。 实例:头文件应用 阅读全文
posted @ 2023-08-18 15:30 一杯清酒邀明月 阅读(104) 评论(0) 推荐(0) 编辑
摘要: 如果程序会运行很长时间(例如在服务器上,注意不是所有的操作系统都像windows一样每天都要重启),并且在不停地申请新的内存块,忘记释放那些已经不再有用的老内存迟早会把内存消耗殆尽,直接导致后边的new操作无法执行甚至崩溃。 动态内存是没有作用域的,所以必须由程序员来跟踪它们的使用情况,并在不需要用 阅读全文
posted @ 2023-08-18 15:29 一杯清酒邀明月 阅读(36) 评论(0) 推荐(0) 编辑
摘要: 实例1:静态强制转换 1 #include <iostream> 2 #include <string> 3 4 using namespace std; 5 class Company 6 { 7 public: 8 Company(string theName,string product); 阅读全文
posted @ 2023-08-18 15:29 一杯清酒邀明月 阅读(20) 评论(0) 推荐(0) 编辑
摘要: 我们可以把一个对象赋值给一个类型与之相同的变量,编译器将生成必要的代码把“源”对象各属性的值分别赋值给“目标”对象的对应成员。这种赋值行为称之为逐位复制。(但如果某些成员变量是指针的话,对象成员逐位复制的结果是你将拥有两个一模一样的实例,而这两个副本里的同名指针会指向相同的地址) 实例1:带指针变量 阅读全文
posted @ 2023-08-18 15:27 一杯清酒邀明月 阅读(35) 评论(0) 推荐(0) 编辑
摘要: 在函数里调用new语句为某种对象或某种基本数据类型分配一块内存,再把那块内存的地址返回给程序的主代码,主代码将使用那块内存并在完成有关操作后立刻释放。 实例1:函数或方法返回内存 1 #include <iostream> 2 using namespace std; 3 4 int *newInt 阅读全文
posted @ 2023-08-18 15:13 一杯清酒邀明月 阅读(41) 评论(0) 推荐(0) 编辑
摘要: 虽然前面讲过的用new给基本类型和对象在运行时分配内存,但它们的尺寸在编译时就已经确定下来——因为我们为之申请内存的数据类型在程序中有明确的定义,有明确的单位长度。 但有些时候,必须等到程序运行时才能确定需要申请多少内存,甚至还需要根据程序的运行情况追加申请更多的内存。 例如: int *x = n 阅读全文
posted @ 2023-08-18 15:11 一杯清酒邀明月 阅读(38) 评论(0) 推荐(0) 编辑
摘要: 到目前为止,所讲解的每个示例程序在完成它的任务时所使用的内存空间都是固定不变的。不能在程序运行期间动态增加或减少内存空间(即静态内存)。 在很多时候,需要存储的数据量到底有多大在事先往往是一个未知数,想要处理好这类情况,就需要在C++程序里使用动态内存。 动态内存由一些没有名字、只有地址的内存块构成 阅读全文
posted @ 2023-08-18 15:10 一杯清酒邀明月 阅读(30) 评论(0) 推荐(0) 编辑
摘要: C语言和C++都有一个专门为调试而准备的工具函数 assert函数。这个函数是在assert.h库文件里定义的。 实例1:assert函数应用 1 #include <cassert> 2 //assert()函数需要有一个参数,它将测试这个输入参数的真或者假状态 3 //如果为真 Do nothi 阅读全文
posted @ 2023-08-18 15:09 一杯清酒邀明月 阅读(140) 评论(0) 推荐(0) 编辑
摘要: 让函数返回错误代码 实例:范围限制 1 #include <iostream> 2 #include <climits> 3 4 using namespace std; 5 class Factorial 6 { 7 public: 8 Factorial(unsigned short num); 阅读全文
posted @ 2023-08-18 15:07 一杯清酒邀明月 阅读(11) 评论(0) 推荐(0) 编辑
摘要: 程序出错可以分为两大类:编译时出错(complie-time error)和运行时错误(run-time error) suggest1:培养并保持一种编程风格 suggest2:认真对待编译器给出的错误/警告信息 suggest3:写代码三思而后行(先画流程图) suggest4:注意检查最基本的 阅读全文
posted @ 2023-08-18 15:07 一杯清酒邀明月 阅读(41) 评论(0) 推荐(0) 编辑
摘要: 通过虚继承某个基类,就是在告诉编译器:从当前这个类再派生出来的子类只能拥有那个基类的一个实例。 虚继承的语法: 1 class Teacher:virtual public Person 2 3 { 4 5 } 这样做的话便可以让Student和Teacher类都虚继承自Person类,编译器将确保 阅读全文
posted @ 2023-08-18 15:06 一杯清酒邀明月 阅读(29) 评论(0) 推荐(0) 编辑