随笔分类 - C++基础知识 / C++Primer
摘要:第十九章 特殊工具与技术 控制内存分配 重载new和delete new表达式的工作机理: string *sp = new string("a value"); //分配并初始化一个string对象 string *arr = new string[10]; // 分配10个默认初始化的strin
阅读全文
摘要:第十八章 用于大型程序的工具 大规模应用程序的特殊要求包括: 在独立开发的子系统之间协同处理错误的能力。 使用各种库进行协同开发的能力。 对比较复杂的应用概念建模的能力。 异常处理 异常处理(exception handling)机制允许程序中独立开发的部分能够在运行时就出现的问题进行通信并作出相应
阅读全文
摘要:第十六章 模板和泛型编程 面向对象编程和泛型编程都能处理在编写程序时不知道类型的情况。 OOP能处理类型在程序运行之前都未知的情况; 泛型编程中,在编译时就可以获知类型。 定义模板 模板:模板是泛型编程的基础。一个模板就是一个创建类或函数的蓝图或者说公式。 函数模板 template <typena
阅读全文
摘要:第十七章 标准库特殊设施 tuple类型 tuple是类似pair的模板,每个成员类型都可以不同,但tuple可以有任意数量的成员。 但每个确定的tuple类型的成员数目是固定的。 我们可以将tuple看做一个“快速而随意”的数据结构。 tuple支持的操作: | 操作 | 解释 | | | | |
阅读全文
摘要:第十五章 面向对象程序设计 OOP:概述 面向对象程序设计(object-oriented programming)的核心思想是数据抽象、继承和动态绑定。 继承(inheritance): 通过继承联系在一起的类构成一种层次关系。 通常在层次关系的根部有一个基类(base class)。 其他类直接
阅读全文
摘要:第十三章 拷贝控制 拷贝控制操作(copy control): 拷贝构造函数(copy constructor) 拷贝赋值运算符(copy-assignment operator) 移动构造函数(move constructor) 移动赋值函数(move-assignement operator)
阅读全文
摘要:第十二章 动态内存 对象的生命周期: 全局对象在程序启动时分配,结束时销毁。 局部对象在进入程序块时创建,离开块时销毁。 局部static对象在第一次使用前分配,在程序结束时销毁。 动态分配对象:只能显式地被释放。 对象的内存位置: 静态内存用来保存局部static对象、类static对象、定义在任
阅读全文
摘要:第十一章 关联容器 关联容器和顺序容器的不同:关联容器中的元素时按照关键字来保存和访问的。 关联容器支持通过关键字来高效地查找和读取元素,基本的关联容器类型是 map和 set。 关联容器类型: | 容器类型 | 解释 | | | | | 按顺序存储 | | | map | 关键数组:保存关键字-值
阅读全文
摘要:第十章 泛型算法 泛型算法 因为它们实现共同的操作,所以称之为“算法”;而“泛型”、指的是它们可以操作在多种容器类型上。 泛型算法本身不执行容器操作,只是单独依赖迭代器和迭代器操作实现。 头文件: #include <algorithm>或者 #include <numeric>(算数相关) 大多数
阅读全文
摘要:第七章 类 (Class) 定义抽象数据类型 类背后的基本思想:数据抽象(data abstraction)和封装(encapsulation)。 数据抽象是一种依赖于接口(interface)和实现(implementation)分离的编程技术。 练习7.1 使用2.6.1节定义的Sales_da
阅读全文
摘要:第九章 顺序容器 顺序容器概述 顺序容器(sequential container):为程序员提供了控制元素存储和访问顺序的能力。这种顺序不依赖于元素的值,而是与元素加入容器时的位置相对应。 顺序容器类型 | 容器类型 | 介绍 | | | | | vector | 可变大小数组。支持快速随机访问。
阅读全文
摘要:第八章 IO库 前面章节已经在用的IO库设施 istream:输入流类型,提供输入操作。 ostream:输出流类型,提供输出操作 cin:一个istream对象,从标准输入读取数据。 cout:一个ostream对象,向标准输出写入数据。 cerr:一个ostream对象,向标准错误写入消息。 >
阅读全文
摘要:第六章 函数 函数基础 函数定义:包括返回类型、函数名字和0个或者多个形参(parameter)组成的列表和函数体。 调用运算符:调用运算符的形式是一对圆括号 (),作用于一个表达式,该表达式是函数或者指向函数的指针。 圆括号内是用逗号隔开的实参(argument)列表。 函数调用过程: 1.主调函
阅读全文
摘要:第五章 语句 简单语句 表达式语句:一个表达式末尾加上分号,就变成了表达式语句。 空语句:只有一个单独的分号。 复合语句(块):用花括号 {}包裹起来的语句和声明的序列。一个块就是一个作用域。 练习5.1 什么是空语句?什么时候会用到空语句? 解: 只含义一个单独的分号的语句是空语句。如:;。 如果
阅读全文
摘要:第四章 表达式 表达式基础 运算对象转换:小整数类型会被提升为较大的整数类型 重载运算符:当运算符作用在类类型的运算对象时,用户可以自行定义其含义。 左值和右值: C中原意:左值可以在表达式左边,右值不能。 C++:当一个对象被用作右值的时候,用的是对象的值(内容); 被用做左值时,用的是对象的身份
阅读全文
摘要:第三章 字符串、向量和数组 using声明 使用某个命名空间:例如 using std::cin表示使用命名空间std中的名字cin。 头文件中不应该包含using声明。这样使用了该头文件的源码也会使用这个声明,会带来风险。 练习3.1 使用恰当的using 声明重做 1.4.1节和2.6.2节的练
阅读全文
摘要:第二章 变量和基本类型 任何常用的编程语言都具备一组公共的语法特征,最基本的特征包括: 整型、字符型等内置类型 变量,用来为对象命名 表达式和语句,用于操作上述数据类型的具体值 if 或 while 等控制结构,有选择地执行一些语句或重复地执行一些语句 函数,用于定义可供随时调用的计算单元 大多数编
阅读全文
摘要:第一章 开始 熟悉编译器 g++: 编译:g++ --std=c++11 ch01.cpp -o main 运行:./prog1 查看运行状态:echo $? 编译多个文件:g++ ch2.cpp Sales_item.cc -o main 输入 g++ --help,查看编译器选项: Usage:
阅读全文
摘要:异常基本概念 Bjarne Stroustrup说:提供异常的基本目的就是为了处理上面的问题。基本思想是:让一个函数在发现了自己无法处理的错误时抛出(throw)一个异常,然后它的(直接或者间接)调用者能够处理这个问题。也就是《C++ primer》中说的:将问题检测和问题处理相分离。 一种思想:在
阅读全文
摘要:友元 目的:访问类中的私有属性 类的主要特点之一是数据隐藏,即类的私有成员无法在类的外部(作用域之外)访问。但是,有时候需要在类的外部访问类的私有成员,怎么办? 解决方法是使用友元函数,友元函数是一种特权函数,c++允许这个特权函数访问私有成员。这一点从现实生活中也可以很好的理解: 比如你的家,有客
阅读全文