
从零开始学习cpp
最近在学习cpp,记录下自己从零开始学习cpp的心路历程。
逐梦如风
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
cpp编程惯用法--抽象
cpp编程惯用法学过cpp primer ,写过一些例子,还是容易迷失在文案的海洋里面。我觉得我已经成了一个用class写c的php程序员。还按照这个方法,完成了个项目,完成项目的过程中真是有点头大,不过写着写着渐渐的熟悉,回过头来发现两点1 需要对c++语法中常用的部分进行总结。2 需要懂得每个项目里面的内存模型,对象什么时候产生,做了什么事情,什么时候销毁3 需要更多的了解智能指针4 需要原创 2016-12-08 18:17:19 · 804 阅读 · 0 评论 -
cpp的工厂模式
cpp的工厂模式//// main.cpp// factoryPartner//// Created by bikang on 16/11/18.// Copyright (c) 2016年 bikang. All rights reserved.//#include <iostream>using namespace std;class Produce{public:原创 2016-11-18 11:41:09 · 1156 阅读 · 0 评论 -
cpp的策略模式
//// main.cpp// strategyPartner//// Created by bikang on 16/11/17.// Copyright (c) 2016年 bikang. All rights reserved.//#include <iostream>using namespace std;class StrategyCd{public: vi原创 2016-11-17 14:50:45 · 763 阅读 · 0 评论 -
cpp的适配器模式
cpp的观察者模式//// main.cpp// adpatermodel//// Created by bikang on 16/11/16.// Copyright (c) 2016年 bikang. All rights reserved.//#include <iostream>#include <cstdlib>using namespace std;//以前只需要n原创 2016-11-16 10:39:31 · 780 阅读 · 0 评论 -
cpp的单例模式。
cpp的单例模式。禁止在外部使用,构造器,拷贝构造器,赋值重载在一些场合是很有用。//// main.cpp// singleData//// Created by bikang on 16/11/15.// Copyright (c) 2016年 bikang. All rights reserved.//#include <iostream>class SignalClass原创 2016-11-15 11:35:25 · 1624 阅读 · 0 评论 -
对于拷贝构造函数和赋值构造函数的理解
拷贝构造是确确实实构造一个新的对象,并给新对象的私有成员赋上参数对象的私有成员的值,新构造的对象和参数对象地址是不一样的,所以如果该类中有一个私有成员是指向堆中某一块内存,如果仅仅对该私有成员进行浅拷贝,那么会出现多个指针指向堆中同一块内存,这是会出现问题,如果那块内存被释放了,就会出现其他指针指向一块被释放的内存,出现未定义的值的问题,如果深拷贝,就不会出现问题,因为深拷贝,不会出现指向堆中同一块转载 2016-11-15 11:30:41 · 2607 阅读 · 0 评论 -
推荐cpp的shared_ptr和auto_ptr的文章
cpp的shared_ptr和auto_ptr的文章http://blog.youkuaiyun.com/u013696062/article/details/39665247http://blog.youkuaiyun.com/u013696062/article/details/39477571转载 2016-11-09 16:26:20 · 561 阅读 · 0 评论 -
面向对象设计原则及设计模式概要
面向对象设计原则: SRP 单一职责原则: 就一个类而言,应该仅有一个引起它变化的原因。 OCP 开放-封闭原则: 软件实体(类、模块、函数等)应该是可以扩展的,但是不可修改。 LSP Liskov替换原则: 子类型必须能够替换掉它们的基类型。 DIP 依赖倒置原则: 抽象不一噶依赖于细节。细节应该依赖于抽象。 ISP 接口隔离原则: 不应该强迫客户依赖于它们不用的方法。接口属于转载 2016-11-03 12:14:08 · 594 阅读 · 0 评论 -
cpp的杂项
cpp的杂项杂项的bug和调试每一项都得专门去做,比较琐碎,所以罗列在这里。预处理器和编译器和c类似bug和调试断点监视点查看内存查看汇编代码预处理器和编译器#define#if define xxx#else#endif#ifndef xxx#define#endif字符串化 #define ABC(x) cout << #x拼接 #define FPRINT(x) f##x##print原创 2016-11-02 16:44:50 · 698 阅读 · 0 评论 -
cpp的异常
cpp的异常我们得区分异常,bug,逻辑错误什么是异常?提供一种安全方法,用于程序可以预见,但不常见的情况如何使用他们?带来的问题?try{}catch(...){}手工引发异常throw “exception”;创建异常类//// main.cpp// use_exception//// Created by bikang on 16/11/1.// Copyright (原创 2016-11-01 18:55:56 · 868 阅读 · 0 评论 -
cpp的处理流
cpp的处理流一堆规则,没有什么特别说明的。不过流都是有缓冲区的,这点要记住了。如果不刷新缓冲区或者关闭文件,数据内容可能不会进入文件。流 数据的封装数据缓冲流和缓冲区streambuf 类管理缓冲区,提供填充,清空,刷新,处理缓冲区的功能ios 输出和输入的基础类,它有一个成员变量为streambufistream和ostream 从ios派生专门管理输入输出行为iostream从istre原创 2016-11-01 17:31:05 · 746 阅读 · 0 评论 -
cpp的智能指针
cpp的智能指针智能指针是利用了构造函数分配内存,利用析构函数自动掉的特性释放内存智能指针可以解决一些内存不释放的问题智能指针实现的例子template <typename T>class MySmartPointer {private: T *m_pointer;public: MySmartPointer(T *pdata):m_pointer(pdata){} ~M原创 2016-11-01 16:32:55 · 1066 阅读 · 0 评论 -
cpp的stl的位标识
cpp的stl的位标识我们将使用bitset和vector,用他们表示位和位标识信息//// main.cpp// use_stl_bit//// Created by bikang on 16/11/1.// Copyright (c) 2016年 bikang. All rights reserved.//#include <iostream>#include <strin原创 2016-11-01 15:24:01 · 708 阅读 · 0 评论 -
cpp的stl的队列和栈
cpp的stl的队列和栈stl的queue和stack除了第二个参数,可以指定采用哪个集合存储数据,其他的看代码即可了解//// main.cpp// use_stack_queue//// Created by bikang on 16/11/1.// Copyright (c) 2016年 bikang. All rights reserved.//#include <ios原创 2016-11-01 15:06:13 · 2369 阅读 · 0 评论 -
cpp的STL算法
cpp的STL算法什么是stl算法操作stl集合的一堆方法。很方便,他们就是一堆工具。你只要熟悉stl就可以很方便的使用他们啦。先明白算法有哪些,有什么作用,然后熟悉一部分常用的,其他的在实践中时候用stl算法的分类非变序算法计数算法 count,count_if搜索算法 search,seach_n find,find_if,find_end,find_first_of,原创 2016-11-01 14:28:47 · 1829 阅读 · 0 评论 -
cpp的函数对象和谓词
cpp的函数对象什么是函数对象将函数对象作为谓词如何使用函数对象实现一元和二元谓词函数对象和谓词的定义函数对象用作函数的对象,实际上是指实现了operator的类的对象函数和函数指针也是对象,但是只有实现了operator的类的对象才能保持状态,才能用于STL算法一元函数接受一个参数的函数一元谓词接受一个参数的函数,而且返回bool类型i二元函数接受二个参数的函数二元谓词接受二个参数的函数原创 2016-10-31 12:05:39 · 667 阅读 · 0 评论 -
cpp的STL之map
cpp的STL之mapmap/multimap map key-value存储,可以理解为关联数组或者字典multimap 运行一个key存储多个值使用//// main.cpp// use_stl_map//// Created by bikang on 16/10/28.// Copyright (c) 2016年 bikang. All rights reserved.原创 2016-10-28 15:55:50 · 1313 阅读 · 0 评论 -
cpp的STL之set
cpp的STL之setset 唯一容器,已排好序的multiset可重复值的容器,已排好序的set和multiset的实例//// main.cpp// use_stl_set//// Created by bikang on 16/10/28.// Copyright (c) 2016年 bikang. All rights reserved.//#include <iostr原创 2016-10-28 14:36:55 · 1137 阅读 · 0 评论 -
cpp的STL之list
cpp的STL之list特点就是个双向链表基本操作//// main.cpp// use_stl_list//// Created by bikang on 16/10/28.// Copyright (c) 2016年 bikang. All rights reserved.//#include <iostream>#include <list>using namespac原创 2016-10-28 14:13:44 · 1068 阅读 · 0 评论 -
cpp的STL值vector和deque
cpp的STL值vector和dequevector的特点在末尾操作数据的时间固定插入数据的时间和数据插入前数据的个数成振臂存储的元素数是动态的,vector负责管理内存vector的操作void tvector(){ cout << "tvector" << endl; //实例化的方式。可以初始化大小 vector<int> vec1; cout <<"vec原创 2016-10-28 13:46:37 · 794 阅读 · 0 评论 -
cpp的STL之string
cpp的STL之string为什么需要string1 创建和操作方便2 不用关心内存分配问题3 不用考虑内存越界4 更加丰富的操作 stl string类stirng的基本操作复制,连接 ,查找字符,查找子串,截短使用模板算法实现反转,大小写转换使用这些常用的基本操作,大致就够了啊,其他的可以采用上面的方法组合起来得出结果//// main.cpp// use_stl_strin原创 2016-10-28 11:58:57 · 1007 阅读 · 0 评论 -
cpp中的STL简介
cpp中的STL简介接下来打算详细学习下cpp中的STL,先来个简介。STL包括什么存储信息的容器访问存储信息的容器的迭代器操作容器内容的算法STL容器两种类型的容器顺序容器关联容器顺序容器vector 动态数组 dequeue 与vector一样,但允许头部插入list 链表关联容器set 排序排列的唯一值列表map key-val存储multiset 与set类似允许存储多个相同值的原创 2016-10-28 10:52:25 · 2416 阅读 · 0 评论 -
cpp中使用sizeof和计算类占用空间的大小
cpp中使用sizeof和计算类占用空间的大小cpp中的sizeof的特性cpp中sizeof的特性(0)sizeof是运算符,不是函数;(1)sizeof不能求得void类型的长度;(2)sizeof能求得void类型的指针的长度;(3)sizeof能求得静态分配内存的数组的长度!(4)sizeof不能求得动态分配的内存的大小!(5)sizeof不能对不完整的数组求长度;(6)当表达式原创 2016-10-27 18:06:03 · 2984 阅读 · 0 评论 -
cpp的宏和模板的简单介绍
cpp的宏和模板的简单介绍宏处理器编译阶段对代码进行预处理,简单的替换,不会进行安全检查宏的名字大写,使用const代替宏,使用内联函数代替宏函数关于#define 和ifdefine关于\和#和##宏延续运算符(\)字符串常量化运算符(#)标记粘贴运算符(##)模板模板函数语法 template <<#template parameters#>><#return type#> <#原创 2016-10-25 18:40:03 · 974 阅读 · 0 评论 -
cpp的类型转换
cpp的类型转换为什么需要类型转换运算符类型转换时一种机制,让程序猿能够暂时或者永久的改变对对象的解释传统的c风格类型转换int b = 11;float a = (float) b;4个类型转换运算符4个运算符,也是双刃剑哦,static_cast, 编译阶段的检测,运行阶段不检测 dynamic_cast,编译阶段的不检测,运行阶段检测,运行阶段类型识别 reinterpret_cast原创 2016-10-25 15:32:52 · 818 阅读 · 0 评论 -
cpp的友元函数
友元函数的简单介绍为什么要使用友元函数友元函数是指某些虽然不是类成员却能够访问类的所有成员的函数。类授予它的友元特别的访问权。通常同一个开发者会出于技术和非技术的原因,控制类的友元和成员函数(否则当你想更新你的类时,还要征得其它部分的拥有者的同意)。具体场景实际上具体大概有下面两种情况需要使用友元函数:(1)运算符重载的某些场合需要使用友元。(2)两个类要共享数据的时候。使用友元函数的优缺点原创 2016-10-24 11:34:15 · 1378 阅读 · 0 评论 -
运算符重载
运算符重载运算符重载的意义摘自百度百科。c++的一大特性就是重载(overload),通过重载可以把功能相似的几个函数合为一个,使得程序更加简洁、高效。在c++中不止函数可以重载,运算符也可以重载。由于一般数据类型间的运算符没有重载的必要,所以运算符重载主要是面向对象之间的。在进行对象之间的运算时,程序会调用与运算符相对应的函数进行处理,所以运算符重载有两种方式:成员函数和友元函数。成员函数的原创 2016-10-24 11:02:55 · 841 阅读 · 0 评论 -
cpp继承和多态
继承c++ 如果不写默认的私有继承继承的基础 继承的语法 class 派生类名:继承方式 基类名1, 继承方式 基类名2,...,继承方式 基类名n { 派生类成员声明; }; 支持多继承 继承后子类可以访问父类的非private方法和成员公有继承&私有继承&保护继承公有继承 当类的继承方式为公有继原创 2016-10-21 16:42:42 · 1168 阅读 · 0 评论 -
cpp的类
cpp的类访问的权限public/private/ptoctedpublic 任意用户都可以访问private 私用的protected 保护的数据类型构造函数(各种类型的构造函数)主要目的: 构造函数提供了对象参数初始化的方法特点和其他语言类似。有参数的构造函数必须同时声明成员对象,父类的构造函数构造函数的顺序: 父类[按照声明顺序] 成员对象[按照声明顺序]原创 2016-10-21 14:34:59 · 1152 阅读 · 0 评论 -
c++的日志库
本来想自己写一个的,在网上找了一个。其实日志库大概包含几个方面 缓冲区和输出的源 格式化和分级别 线程安全spdlo c++编写的日志库,下载地址:https://github.com/gabime/spdlog。只用引用头部就可以运行了,很方便。官方的代码例子//// Copyright(c) 2015 Gabi Melman.// Distributed und原创 2016-10-19 11:32:55 · 3487 阅读 · 0 评论 -
c++操作mysql
还是我的抓取小程序需要用到mysql本来想用mysql++的,我在xcode上没有配置好~~所以简单的使用下mysql库,实现sql的增删查c的api支持的数据类型 MYSQL该结构代表1个数据库连接的句柄。几乎所有的MySQL函数均使用它。不应尝试拷贝MYSQL结构。不保证这类拷贝结果会有用。 MYSQL_RES该结构代表返回行的查询结果(SELECT, SHOW, DESCRIBE, EXPLA原创 2016-10-18 15:21:39 · 5161 阅读 · 0 评论 -
struct结构的内存对齐
struct结构的内存对齐内存对齐的主要作用是:1、平台原因(移植原因):不是所有的硬件平台都能访问任意地址上的任意数据的;某些硬件平台只能在某些地址处取某些特定类型的数据,否则抛出硬件异常。2、性能原因:经过内存对齐后,CPU的内存访问速度大大提升。内存对齐的意义,cpu读取内存数据不是一个个读取,是一片片读取,而且都是2的倍数2,4,,8,16,如果内存不对齐,比如只读了后台的5原创 2016-10-12 18:04:43 · 970 阅读 · 0 评论 -
c++标准库的正则regex
可能是我习惯了regex,是真的不太习惯使用regex而且regex不习惯,也不太熟悉比如我只想匹配数据里面所有的字符,非得把正则表达式写全了。subject123匹配123非得是subject([0-9]+),其实我想用([0-9]+) 太不熟悉他们了。 如果我用php写,php的正则是基于pcre库的,改天试试pcre库$str = "subject123";$parter = "(\d+原创 2016-10-12 15:21:51 · 4966 阅读 · 0 评论 -
c++使用libpcre捕获多行数据
由于初次尝试用c++写个简单的爬虫系统,不免用到正则,正则有多行匹配等特性,以前一直用php开发pcre_match加上正则修正符m多行,i忽略大小写 s.代表任意字符,不要太方便,所以在使用cpp的时候遇到了困惑。实际上pcre匹配数据是多次去匹配的, 我匹配到一个数据,然后对源数据进行偏移,然后匹配下一个,这样子,知道最后一个#include "pcre.h"#include <stdio.原创 2016-10-14 15:32:10 · 1078 阅读 · 0 评论 -
c++使用libpcre
我还是不太习惯使用regex,习惯使用pcre标准的正则库 先放上代码#include "pcre.h" #include <stdio.h> #include <string.h> #define OVECCOUNT 256int main(int argc, char ** argv) { char pText[1024] = "<div class=\"main-w原创 2016-10-13 13:49:02 · 2687 阅读 · 0 评论 -
c++使用libiconv
做一个抓取的小项目使用c++调用libiconv 一直提示报错 No matching function call iconv在c下能调用,在c++下无法调用。 是命名冲突的问题,新建一个namespace即可#include <iostream>#include "stdio.h"#include "string.h"namespace myconv{ #include "icon原创 2016-10-11 13:59:13 · 3027 阅读 · 0 评论 -
c++使用libcurl
最近一直在写个抓取天猫数据的小工具,用到libcurl库#include <iostream>#include "curl/curl.h"using namespace std;void tcurl();size_t myWrite( void *ptr, size_t size, size_t nmemb, void *stream);int main(int argc, char cons原创 2016-10-11 13:50:19 · 1433 阅读 · 0 评论 -
转载c++中的string
C++中提供的string类得功能也是非常强大的,一般都能满足我们开发项目时使用。要想使用标准C++中string类,必须要包含#include // 注意是,不是转载 2016-10-10 14:28:57 · 360 阅读 · 0 评论 -
c++读写文件
在代码里面有一个地方没有涉及到缓冲 强制缓冲可以通过flush 和endl,close,或者是明确调用函数sync()去刷新//// main.cpp// use_fstream//// Created by bikang on 16/10/10.// Copyright (c) 2016年 bikang. All rights reserved.//#include <ios原创 2016-10-10 14:51:15 · 435 阅读 · 0 评论 -
cpp中string和字符串之间的相互转换
void charChage(){ //1. string转const char* string s ="hello cpp"; const char* c_s = s.c_str(); cout << c_s << endl; //2. const char*转string 直接赋值即可 // char* 转string也可以这么干 const原创 2016-10-10 14:04:40 · 2443 阅读 · 0 评论