![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
重温《C++ Primer》笔记
文章平均质量分 66
芳草源
路漫漫其修远兮,吾将上下而求索
展开
-
重温《C++ Primer》笔记一 快速入门
一个简单C++程序的结构 main函数 首先,main函数是程序的入口,即程序是从main函数开始执行的,也是从这里结束。 main函数的执行 main函数与普通函数一样也是被调用才开始执行的,但是调用main函数的对象不是main函数本身,而是由系统调用。 main函数的结束 main函数的结束伴随这一条return语句,此语句想系统返回一个值。在大多数系统中,main函数的返回值代原创 2015-03-05 09:12:29 · 467 阅读 · 0 评论 -
重温《C++ Primer》笔记九 const形参小结
首先,形参大致可以分为三种:非引用形参、引用形参和指针类型形参。 一、非引用形参 在传递参数的时候,不论是所谓的传值还是传址,实际上都是实参值到形参值的复制,其中的区别只是复制的是普通对象还是引用对象而已。对于非引用形参,通过参数传递之后,形参是实参的一个副本,而非引用形参使得复制后形参与实参并没有任何关联,因此,在函数中对形参的任何操作将不会影响到实参的值,因此,不论实参是变量还是常原创 2015-07-05 10:36:52 · 672 阅读 · 0 评论 -
重温《C++ Primer》笔记八 数组与指针的几个问题
数组与指针是类似于vector容器和迭代器的低级复合类型,但是数组与指针比较原始,与计算机硬件比较接近,在使用上比较没有什么限制,因此使用数组与指针比使用vector容器和迭代器要危险得多,但是因为可以使用数组与指针直接操作内存,因此其效率也比较高,所以一般也只在程序需要强调速度的时候才使用数组与指针,但是深入理解数组与指针还是十分必要的。有几个常见的比较混淆的问题。 一、下标和指针原创 2015-07-02 10:04:40 · 417 阅读 · 0 评论 -
C++中的内存分配
一、一个C++编译的程序占用内存分为五大部分 1. 栈区(stack):由编译器自动分配与释放,其操作方式类似于数据结构中的栈。 2. 堆区(heap):一般由程序员手动分配释放,若程序员不释放,程序结束时可能有OS回收。(不是数据结构中的堆) 3. 全局区:全局变量和静态变量是放在一块的,初始化的全局变量和静态变量放在初始化区,未初始化的全局变量和静态变量放在相邻的另一块区域,程序转载 2015-05-14 20:05:54 · 391 阅读 · 0 评论 -
重温《C++ Primer》笔记六 拷贝构造函数的存在
构造函数是在创建一个新对象的时候被执行的函数,其中参数列表就是让我们可以根据已知的数据来设置将要被创建的同类新对象。这些参数可以是传递给类中部分成员变量的,另外还有一种情况是,我们现在已经有了一个对象,想根据这个已知的对象创建一个相同的对象,由于成员变量比较多,如果一个一个地传递设置值的话,则参数表会很繁杂。那么C++就允许将构造函数的参数直接设置为该类对象。 那么现在有个疑问,这些工作完全可以原创 2015-04-25 21:19:58 · 596 阅读 · 0 评论 -
重温《C++ Primer》笔记七 VTABLE与VPTR的实现
函数调用的两种绑定 在学习虚函数之前,我们必须了解什么叫做绑定。在程序中调用一个函数,编译阶段会对其类型进行检查,而在链接阶段将与函数定义进行链接。对于一个函数调用,将执行哪个函数体,这是通过绑定来设置的,即把函数体与函数调用相联系称为绑定(binding)。而根据确定能够确定绑定关系的时间,将绑定分为早绑定和晚绑定两种。 1、早绑定(early binding) 早绑定即绑定在程序运行之前原创 2015-04-26 11:08:25 · 1672 阅读 · 0 评论 -
重温《C++ Primer》笔记五 类定义中成员函数的名字隐藏(虚函数与非虚函数)
类定义中大致有两种函数——普通函数和虚函数。如果对一个类继承并且对其中的成员函数重新进行定义,也可以分为两种情况: 1、在派生类的定义中明确地定义操作和返回类型,称之为普通成员函数的重定义(redefining); 2、对虚函数的重定义成为重写(overriding); 下面的程序是摘自《Thinking in C++》上的一段,可以用来解释发生在函数重定义过程中的名字隐藏(这里的名字指的是原创 2015-04-23 10:40:52 · 739 阅读 · 0 评论 -
重温《C++ Primer》笔记四 构造函数的初始化列表
在C++中保证初始化是非常重要的,因为并不能总是保证第一次使用所定义对象的时候是对其赋值而不是读取。因此,在创建一个对象的时候,编译器总是保证该对象中所有的“子对象”全部被初始化。而我们需要关注的则是这些“子对象”是什么,并且是在什么时候被初始化的,以及如何被初始化的。 首先抛出一句话:“子对象”包括成员变量和该类的父类对象。 到底构造函数是在什么时候被调用的呢?很多书上都是很简单地介绍说,是原创 2015-04-23 08:28:11 · 725 阅读 · 0 评论 -
重温《C++ Primer》笔记三 vector、list、deque三种顺序容器小结
我觉得容器是面向对象里面的具有数据结构设计的数组,它拥有了数组的存储其它元素对象的能力,又提供着比数组要大得多得多的控制和操作。简而言之,容器是一种模版类,它可以容纳特定类型的对象集合,这个特定的类型可以由我们在实例化容器对象的时候指定。除了容器本身定义的操作之外,我们的泛型算法也为之定义了更多更强大的操作,被封装在算法库中,后续在泛型算法的笔记中会提到,这里主要是梳理一下容器本身自带的一些操作、原创 2015-03-29 14:20:18 · 925 阅读 · 0 评论 -
重温《C++ Primer》笔记二 标准IO库的条件状态
在C++的标准IO库中,指定了一些方法来管理缓冲区及其流的状态。虽然很多程序只需要知道流是否有效即可,但是,不排除某些程序需要更详细地访问或者控制流的状态,以及当流出现错误的时候需要弄清楚具体是哪方面的错误。 首先,标准IO库用一个枚举来定义了流对象的四种状态: enum _Iostate{ goodbit = 0x0, //正常可用状态 eofbit = 0x1, //遇原创 2015-03-28 10:09:56 · 668 阅读 · 0 评论 -
重温《C++ Primer》笔记十 当数组作为函数参数时
提到数组作为实参,大家可能都会想到,数组是不能复制的,所以作为参数时不能真正得到实参数组。另外,使用数组名字的时 候,编译器会自动将其视为指针,因此它实际获得的是实参数组中首个元素的地址。没错,对于非引用数组参数是这样,但是对于 引用数组参数则是可以实现真正的数组传递的。 一、非引用数组形参,[]和长度值的作用 当以数组形式作为函数参数时,首先,[]的作用是告诉编译器这是个原创 2015-08-06 21:19:00 · 791 阅读 · 1 评论