
C++ primer
文章平均质量分 57
zpznba
日日行,不怕千万里。常常做,不怕千万事。
展开
-
C++ primer笔记第八章 IO库
IO库C++是通过标准库中的IO库来处理输入输出的,本章就是来介绍这个IO的,之前也学了一些,就是cin之类的。接下来就系统地学一下,彻底搞定这个IO。IO就是Input和Output。不要认为这一章很简单,它里面有很多东西要学的,我开始看的时候觉得这一章没啥,现在看来还是要好好理解下的:我们先来看看我们已经学到过的一些IO库设施:istream输入...原创 2018-12-19 22:40:39 · 512 阅读 · 0 评论 -
C++ 面向对象高级开发--pointer-like classes(智能指针)
C++的类设计出来可以像1.一个指针2.像一个函数。先来看1,为了比一般指针做更多的东西。如图:智能指针中一定带一个一般的指针,而且必须写上* 和 -> 的方法。【迭代器其实也是一种智能指针】如图,link_type就是那个真正的指针,黄色部分就是* he -> 的实现。但是因为迭代器的特殊操作要求,这两个方法的实现与一般智能指针的实现有不同:...原创 2018-10-25 09:49:59 · 231 阅读 · 0 评论 -
关于C++ 转换函数(conversion function)和explicit关键字
如上图:黄色部分是转换函数!1.没有返回类型2.没有参数3.因为是转换,所以通常会加上const4.转换可以把class转为其他类型(注意不一定是基本类型,只要是编译器能认识的类型),也可以把其他类型转成class。如下就是把其他类型转换成类类型:(不加explicit.)(绿色部分)【注意】如果同时出现转换函数和上述只有一个实参的构造函数。编译器可能会出错,因为二义性,不知道...原创 2018-12-14 21:22:43 · 277 阅读 · 0 评论 -
C++ primer 10.3 定制操作(lambda表达式和bind参数绑定)
本节总的思路:1.需要定制操作的时候可以给算法传入函数2.参数个数不匹配的时候,可以用lambda表达式3.很多重复的操作不适合用lambda表达式可以用bind向算法传递函数sort函数不有一个重载版本,它的第3个参数是一个谓词bool isShorter(const string &s1, const string &s2) { ...原创 2018-12-18 09:47:26 · 392 阅读 · 0 评论 -
C++ primer 12.1 智能指针与动态内存
以下内容参考 https://www.jianshu.com/p/bf8de014e5c2C#、Java、python和go等语言中都有垃圾自动回收机制,在对象失去引用的时候自动回收,而且基本上没有指针的概念,而C++语言不一样,C++充分信任程序员,让程序员自己去分配和管理堆内存,如果管理的不好,就会很容易的发生内存泄漏问题,而C++11增加了智能指针(Smart Pointer)。主要...原创 2019-01-04 13:50:53 · 190 阅读 · 0 评论 -
C++ primer 12.2 动态数组
动态数组我们目前学到的那些动态内存分配,一次只能分配/释放一个对象,但某些应用需要一次为对象分配很多内存,C++语言定义了另一种new表达式语法,可以分配并初始化一个对象数组。我们之前构造的动态内存的那个类StrBlob,使用了vector容器作为底层,这是一种更简单、快速、安全的方式,因为vector会帮我们处理一些细节,而我们构造的应用基本都没有直接访问动态数组的需求。所以说啊...原创 2019-01-04 22:01:40 · 197 阅读 · 0 评论 -
C++ primer 15.1-15.2 基类和派生类
原创 2019-01-10 20:46:58 · 176 阅读 · 0 评论 -
C++ 中的左值和右值
一、前言一直以来,我都对C++中左值(lvalue)和右值(lvalue)的概念模糊不清。我认为是时候好好理解他们了,因为这些概念随着C++语言的进化变得越来越重要。二、左值和右值——一个友好的定义首先,让我们避开那些正式的定义。在C++中,一个左值是指向一个指定内存的东西。另一方面,右值就是不指向任何地方的东西。通常来说,右值是暂时和短命的,而左值则活的很久,因为他们以变量的形式(v...转载 2019-01-07 21:32:25 · 855 阅读 · 0 评论 -
C++ 继承与派生(一)
概念:保持已有类的特性而构造新类的过程。继承的目的:实现代码的重用和设计的重用。(比如继承一个抽象类是为了继承它的设计,抽象类并没有完全实现,但是把接口设计好了,剩下的要自己实现)派生的目的:当新问题出现,原有程序不能解决问题时,需要对原有程序进行改造。 继承方式:一个派生类可以同时有多个基类,这是多继承。 除了基类的构造和析构函数不继承,其他所有基类的部分全部继承。...原创 2019-01-31 13:27:24 · 1517 阅读 · 0 评论 -
C++ 继承与派生(二)
多继承时的继承顺序:调用基类的构造函数,调用顺序按照他们被继承时声明的顺序从做到又继承。Talk is cheap.show me the code:运行结果如下:看到了没,多个基类构造函数的执行顺序是由最开始的继承列表中的声明顺序决定的:class Derived : public Base2,public Base1,public Base3另外,我们也可以看...原创 2019-02-02 13:19:54 · 139 阅读 · 0 评论 -
C++ priority_queue用法
std::priority_queuetemplate <class T, class Container = vector<T>, class Compare = less<typename Container::value_type> > class priority_queue; C++ STL默认的priority_queue是将优...原创 2018-11-28 21:58:23 · 608 阅读 · 0 评论 -
C++ primer 读书笔记 第七章 06 类的静态成员
在成员的声明之前加上static关键字即可声明静态成员静态成员的访问使用作用域运算符直接访问 通过类的对象访问Account::rate(); Account ac1; Account *ac2 = &ac1; r = ac1.rate(); r = ac2->rate();静态成员函数不能访问类中的成员变量静态成员函数不属于任何一...原创 2018-11-30 16:49:49 · 204 阅读 · 0 评论 -
C++ primer 读书笔记 第七章 01 定义抽象数据类型
定义成员函数成员函数的声明必须在类的内部,它的定义既可以在类的内部也可以在类的外部。struct Sales_data { std::string isbn() const { return bookNo; } double arv_price() const; };isbn函数的定义和声明都在类的内部 arv_price函数只在类的内部做了声...原创 2018-12-01 16:58:20 · 196 阅读 · 0 评论 -
C++ primer读书笔记 10.1~10.2 初识泛型算法
泛型算法独立于特定的容器 和迭代器的联系非常紧密 并不直接操作容器上面三条一定要理解!从三方面去理解泛型算法: 泛型算法可以大致分为三类:只读、可写、重排。这一小节的用意就是针对每一类泛型算法介绍几个典型的函数,因为每一类算法在结构上都是相似的。只读这种算法只会读取给定范围内的元素accumulate定义在numeric头文件中,用于求和int sum ...原创 2018-12-14 16:00:19 · 165 阅读 · 0 评论 -
C++ primer 9.6 容器适配器 读书笔记
一、容器适配器之我见C++中为了支持常用的数据结构队列、栈、优先队列等,采用偷懒的办法将原先的顺序容器通过适配器转换成这三个数据结构。默认情况下stack和queue是基于deque实现的,priority_queue是在vector上实现的。什么是适配器?类比生活中我们经常要用的电源适配器,它是做电压转换的。类比到程序设计中其实也是为了完成需求和现有方法不相同的难题。适配器在我看来其实就...原创 2018-12-12 20:40:55 · 249 阅读 · 0 评论 -
C++ primer笔记 9.5 string的其他操作
原创 2018-12-12 16:29:24 · 143 阅读 · 0 评论 -
C++ primer 读书笔记 9.3 顺序容器操作
向顺序容器添加元素push push_back push_front insert implace向vector、string或deque插入元素有可能使所有指向容器的迭代器、引用和指针失效。因为添加元素时可能引起整个对象空间的重新分配(旧的空间不足以容纳插入新元素后的对象)。重新分配一个对象的存储空间需要分配新的内存,并将元素从旧的空间移动到新的空间中。作者说:使...原创 2018-12-11 15:56:46 · 260 阅读 · 0 评论 -
C++ primer 读书笔记 9.2 容器库概览
模板类list<int> deque<double>也可以定义容器的容器,vector<string> vector<vector<string>>迭代器迭代器范围 [begin, end)end指向尾后元素,begin可以通过递增到达end这种范围的约定使得我们能简单安全的遍历容器w...原创 2018-12-07 11:57:28 · 138 阅读 · 0 评论 -
C++ primer 7.5 构造函数再探
初始值列表Sales_data::Sales_data(const string &s) : bookNo(s) { } Sales_data::Sales_data(const string &s) { bookNo = s; }这两个函数从执行的结果上看没有区别,但是第一个函数执行的过程相当于string fo...原创 2018-12-05 17:25:17 · 239 阅读 · 0 评论 -
C++ primer读书笔记 7.4 类的作用域
一个类就是一个作用域,在类的外部,成员的名字被隐藏起来了在类的外部定义成员函数时, 要加上类名和作用域运算符而一旦遇到了类名,定义的剩余部分在就在类的作用域之内了。包含参数列表和函数体另一方面,函数的返回类型通常出现在函数名之前,因此如果返回类类型,需要明确指出哪个类定义了该类型,即为返回的类类型添加类名和作用域运算符名字查找与类的作用域编译器处理完类中的全部声明后才会处理...原创 2018-12-05 16:11:44 · 155 阅读 · 0 评论 -
7.3 类的其他特性
类型成员class Screen { public: typedef std::string::size_type pos; private: pos cursor = 0; pos height = 0, width = 0; std::string contents; };类型成员同样存在访问限制,可以是publi...原创 2018-12-05 12:02:34 · 178 阅读 · 0 评论 -
C++ primer 读书笔记 第七章 02 访问控制和封装
在c++中,我们使用访问说明符加强类的封装性:定义在public说明符之后的成员在整个程序内可被访问,public成员是暴露在外的,决定了类的接口 定义在private说明符之后的成员可以被类的成员函数访问,但不能被使用该类的代码访问,private封装了类的实现细节一个类可以包含0个或多个访问说明符,而且不限制某个访问说明符出现的次数。class和struct可以使用class或...原创 2018-12-01 17:13:59 · 145 阅读 · 0 评论 -
C++11中的数组初始化
定义:int *pia = new int[10]; // array of 10 uninitialized ints此new表达式分配了一个含有 10 个int型元素的数组,并返回指向该数组第一个元素的指针,此返回值初始化了指针pia。在自由存储区中创建的数组对象是没有名字的,只能通过其地址间接地访问堆中的对象。注意:C++使用new和delete在堆(自由存储区)...原创 2019-03-15 09:59:16 · 4948 阅读 · 0 评论