自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(46)
  • 收藏
  • 关注

原创 Ubuntu使用git

首先到 https://github.com/这里创建一个帐号。创建Repository,到个人首页以后,点击 New repository,如下图: 点击 Create repository,完成创建Generating SSH Keys(生成 SSH 密钥)a.设置git的user name和email: $ git config –global user.name “test”$ git

2016-08-22 18:23:46 717

转载 day02

0 回顾brk/sbrk 维护一个位置。 brk/sbrk改变这个位置。 brk改变绝对位置 sbrk改变相对位置昨天的补充: 永远记住:C的基本类型就那几种。 所有全新类型都是使用typedef重新定义的。 类型重定义的好处: 1. 维护方便 2. 便于移植(每个系统中都用同一个名,不用修改) 3. 容易理解1 映射虚拟内存没有任何额外维护数据的内存分配 mmap/munmap1

2016-04-13 18:10:11 334

转载 day01

1 malloc怎么分配空间  malloc与new的关系   2 linux对内存的结构描述a) /proc/${pid}/ 存放进程运行时候所有的信息。程序一结束,该目录就删掉了。 b) 任何一个程序的内存空间其实分成4个基本部分。i.代码区ii.全局栈区iii.堆iv. 局部栈小实验: 运行一个只包含while(1);的程序,然后另起一个终端,cd /proc下面的对应进程的p

2016-04-12 11:12:20 244

原创 88 boost智能指针(二)

PIMPLPIMPL背后的思想是把客户与所有关于类的私有部分的知识隔离开。避免其它类知道其内部结构 降低编译依赖、提高重编译速度 接口和实现分离 降低模块的耦合度 编译期 运行期 提高了接口的稳定程度 对于库的使用,方法不能改变 对于库的编译,动态库的变更,客户程序不用重新编译

2016-04-11 11:27:37 280

原创 87 智能指针(一)

智能指针本质思想: 将堆对象的生存期用栈对象来管理,当new一个堆对象的时候,立刻用智能指针来接管,具体做法是在构造函数进行初始化(用一个指针指向堆对象),在析构函数中调用delete来释放堆对象。 由于智能指针本身是一个栈对象,它的作用域结束的时候,自动调用析构函数,从而调用了delete释放了堆对象。scoped_ptr#include <boost/scoped_ptr.hpp>#inc

2016-04-11 08:21:04 281

原创 85 stl(十二)

容器适配器栈#include <iostream>#include <list>#include <stack>using namespace std;int main(void){ stack<int, list<int> >s; for (int i = 0; i < 5; i++) { s.push(i); } /*for (size

2016-04-10 19:38:21 244

原创 83 stl(十一)

函数适配器#include <iostream>#include <algorithm>#include <functional>#include <vector>using namespace std;bool is_odd(int n){ return n % 2 ==1;}int main(void){ int a[] = {1,2,3,4,5}; vec

2016-04-10 17:35:53 232

原创 82 stl(二)

类函数#include<iostream>using namespace std;class FunObj{public: void operator()() { cout << "hello!" << endl; } void operator()(int n) { cout << "hello2!" << endl;

2016-04-10 11:06:04 225

原创 76 stl(四)

//ptr_vector.h#ifndef _PTR_VECTOR_H_#define _PTR_VECTOR_H_#include <vector>#include <memory>template <typename T>class ptr_vector :public std::vector<T*>{public: ~ptr_vector() { c

2016-04-08 16:36:47 235

原创 73 STL(一)

STL六大组件 Container(容器) Adapter(适配器) Algorithm(算法) Iterator(迭代器) Function object(函数对象) Allocator(分配器)七种基本容器: 向量(vector)、双端队列(deque)、列表(list)、集合(set)、多重集合(multiset)、映射(map)和多重映射(multimap)

2016-04-08 11:07:54 246

原创 72 模板(四)

用模板实现单例模式//Singleton.h#ifndef _SINGLETON_H_#define _SINGLETON_H_#include <cstdlib>#include <iostream>using namespace std;template <typename T>class Singleton{public: static T& GetInstance()

2016-04-07 20:38:44 232

原创 71 模板(三)

缺省模板参数template <typename T,typename CONT>=std::vector<T> >class Stack{...}//Stack.h#ifndef _STACK_H_#define _STACK_H_#include <exception>#include <deque>using namespace std;template <typename T

2016-04-07 17:54:27 419

原创 70 模板(二)

类模板类模板的实例化:用具体的数据类型替换模板的参数以得到具体的类(模板类) 模板类也可以实例化为对象 用下列方式创建类模板的实例: 类名<类型实参表>对象名称;//Stack.h#ifndef _STACK_H_#define _STACK_H_template <typename T>class Stack{public: explicit Stack(int maxSi

2016-04-07 11:40:13 208

原创 69 模板(一)

//max.h#ifndef _MAX_H_#define _MAX_H_template <typename T>const T& max(const T& a, const T& b)//必须将实现放在头文件{ return a < b ? b : a;}//函数模板重载template <typename T>const T& max(const T& a, const

2016-04-07 09:58:07 471

原创 60 IO流类库(二)

文件流ofstream,由ostream派生而来,用于写文件 ifstream,由istream派生而来,用于读文件 fstream,由iostream派生而来,用于读写文件#include <cassert>#include<iostream>#include <fstream>using namespace std;int main(void){ ofstream fout;

2016-04-06 10:27:30 310

原创 59 io流类库(一)

继承关系

2016-04-06 09:55:06 299

原创 58 单例模式与auto_ptr

用智能指针管理,可以使单例模式调用析构函数#include <iostream>#include <memory>using namespace std;class Singleton{public: static Singleton* GetInstance() { /*if (instacne_ == NULL) {

2016-04-05 19:44:17 341

原创 56 RAII实现智能指针

空悬指针 内存泄漏 重复释放//Node.h#ifndef _NODE_H_#define _NODE_H_class Node{public: Node(); ~Node(); void Calc() const;};class NodePtr{public: explicit NodePtr(Node* ptr = 0) :pt

2016-04-05 12:07:00 245

原创 54 跟踪内存泄漏

自己实现malloc,在里面进行跟踪 valgrind、dmalloc、efence (linux) visual leak detector(windows)operator new operator deletenew operator <=>operator new + 构造函数头文件包含次序 C库、C++库、其他库.h 、项目中.h//Tracer.h#ifndef _TRACER

2016-04-04 16:20:46 329 1

原创 51 异常(二)

#include <iostream>#include <string>using namespace std;class MyException{public: MyException(const char* message) :message_(message) { cout << "MyException ..." << endl;

2016-04-03 20:41:50 282

原创 50 异常(一)

C语言异常处理#include <stdio.h>#include <setjmp.h>jmp_buf buf;//保存一个栈环境double Divide(double a, double b){ if (b == 0.0) { longjmp(buf, 1); //throw } else return a / b;}int

2016-04-03 19:57:50 287

原创 41 面向对象版表达式计算器(二)

基于对象编程 值语义 面向对象编程 对象语义值语义对象通常以类对象的方式来使用对象语义对象通常以指针或者引用方式来使用,配合智能指针自动释放对象auto_ptr 所有权独占,不能共享,但是可以转移 shared_ptr 所有权共享,内部维护了一个引用计数 weak_ptr 弱指针,它要与shared_ptr配合使用,循环引用 scoped_ptr 与auto_ptr类似

2016-03-31 11:16:51 401

原创 40 面向对象版表达式计算器(一)

#include "Node.h"#include <cmath>#include <iostream>double NumberNode::Calc() const{ return number_;}BinaryNode::~BinaryNode(){ delete left_; delete right_;}double AddNode::Calc() c

2016-03-31 11:02:12 554

原创 35 虚函数与多态(二)

纯虚函数虚函数是实现多态性的前提需要在基类中定义共同的接口 接口要定义为虚函数 如果基类的接口没办法实现(如形状类Shape) 解决办法 将这些接口定义为纯虚函数定义纯虚函数: class 类名{ virtual 返回值类型 函数名(参数表)=0; };纯虚函数不需要实现

2016-03-30 12:04:37 252

原创 34 虚函数与多态(一)

静态绑定与动态绑定静态绑定 绑定过程出现在编译阶段,在编译期就已确定要调用的函数。 动态绑定 绑定过程工作在程序运行时执行,在程序运行时才确定将要调用的函数。 只有通过基类指针或引用调用虚函数才能引发动态绑定#include <iostream>using namespace std;class Base{public: virtual void Fun1() {

2016-03-30 11:26:13 232

原创 33 继承(五)

类/对象大小计算#include <iostream>using namespace std;class BB{public: int bb_;};class B1 :virtual public BB{public: int b1_;};class B2 :virtual public BB{public: int b2_;};class DD :publ

2016-03-29 19:59:56 218

原创 32 继承(三)

多重继承#include <iostream>using namespace std;class Furniture{public: Furniture(int weight) : weight_(weight) { cout << "Furniture ..." << endl; } ~Furniture() { cou

2016-03-29 17:34:35 242

原创 31 继承(三)

派生类到基类的转换1.当派生类以public方式继承基类时,编译器可自动执行的转换(向上转型upcasting安全转换) 派生类对象指针自动转化为基类对象指针 派生类对象引用自动转化为基类对象引用 派生类对象自动转换为基类对象(特有成员消失) 2.当派生类以private/protected方式继承基类时 派生类对象指针(引用)转化为基类对象指针(引用)需用

2016-03-29 15:34:03 260

原创 30 继承(二)

继承与构造函数#include <iostream>using namespace std;class ObjectB{public: ObjectB(int objb) : objb_(objb)//没有默认构造函数 { cout << "ObjectB " << endl; } ~ObjectB() { cout <<

2016-03-29 15:24:01 251

原创 29 继承(一)

三种继承方式#include <iostream>using namespace std;class Base{public: int x_;protected: int y_;private: int z_;};class PublicInherit : public Base//公有继承{public: void Test() {

2016-03-29 08:53:35 257

原创 28 map

标准库的map类型使用map得包含map类所在的头文件include < map >定义一个map对象: map#include <map>#include <string>#include <iostream>using namespace std;int main(){ //插入到map容器内部的元素默认是按照key从小到大来排序。 //key类型一定要重载<运算符

2016-03-28 20:22:42 250

原创 27 vector

vector对象的初始化vector<T> v1;//vector保存类型为T的对象。默认构造函数v1为空vector<T> v2(v1);//v2是v1的一个副本vector<T> v3(n,i);//v3包含n个值为i的元素vector<T> v4(n);//v4含有值初始化的元素的n个副本

2016-03-28 18:05:59 252

原创 26 string

Stringstring类型支持长度可变的字符串,C++标准库将负责管理与存储字符相关的内存,以及提供各种有用的操作 typedef basic_string< char > string; typedef basic_string< wchar_t >wstring; 要使用string类型对象,必须包含相关头文件 include < string > using std::strin

2016-03-28 16:34:50 288

原创 25 运算符重载(四)

类型转换运算符//Integer.h#ifndef _INTEGER_H_#define _INTEGER_H_class Integer{public: Integer(int n); ~Integer(); Integer& operator++(); //friend Integer& operator++(Integer& i); Integer

2016-03-28 12:22:28 223

原创 23 运算符重载(二)

++运算符重载前置++运算符重载 成员函数的方式重载,原型为: 函数类型 & operator++(); 友元函数的方式重载,原型为: friend 函数类型 & operator++(类类型 &); 后置自增和后置自减的重载 成员函数的方式重载,原型为: 函数类型 & operator++(int); 友元函数的方式重载,原型为:

2016-03-28 09:11:29 206

原创 23 运算符重载(二)

++运算符重载//Integer.h#ifndef _INTEGER_H_#define _INTEGER_H_class Integer{public: Integer(int n); ~Integer(); Integer& operator++(); //friend Integer& operator++(Integer& i); Integer o

2016-03-27 18:01:32 238

原创 22 运算符重载(一)

成员函数与友元函数的运算符重载运算符重载允许把标准运算符(如+、—、*、/、<、>等)应用于自定义数据类型的对象成员函数原型的格式: 函数类型 operator 运算符(参数表); 成员函数定义的格式: 函数类型 类名::operator 运算符(参数表){ 函数体; }友元函数原型的格式: friend 函数类型 operator 运算符

2016-03-27 11:56:08 217

原创 21 友元

友元友元是一种允许非类成员函数访问类的非公有成员的一种机制。 可以把一个函数指定为类的友元,也可以把整个类指定为另一个类的友元。 友元函数在类作用域外定义,但它需要在类体中进行说明 为了与该类的成员函数加以区别,定义的方式是在类中用关键字friend说明该函数,格式如下: friend 类型 友元函数名(参数表); 友元的作用在于提高程序的运行效率#include <math.h>#i

2016-03-25 18:06:45 451

原创 19 对象的使用(四)

const 成员函数const int n = 100;//定义常量const Test t(10);const int& ref = n;//const引用int& ref = n; //Errorconst与指针const int*p;//const出现在*左边,表示*p是常量(*p=200;Error)int * const p2;//const出现在*右边,表示p2是常量(p2=&

2016-03-25 15:33:44 272

原创 18 对象的使用(二)

static与单例模式保证一个类只有一个实例,并提供一个全局访问点#include <iostream>using namespace std;class Singleton{public: static Singleton* GetInstance() { if (instacne_ == NULL) { instacn

2016-03-25 12:01:51 247

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除