- 博客(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
795
转载 day02
0 回顾brk/sbrk 维护一个位置。 brk/sbrk改变这个位置。 brk改变绝对位置 sbrk改变相对位置昨天的补充: 永远记住:C的基本类型就那几种。 所有全新类型都是使用typedef重新定义的。 类型重定义的好处: 1. 维护方便 2. 便于移植(每个系统中都用同一个名,不用修改) 3. 容易理解1 映射虚拟内存没有任何额外维护数据的内存分配 mmap/munmap1
2016-04-13 18:10:11
376
转载 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
282
原创 88 boost智能指针(二)
PIMPLPIMPL背后的思想是把客户与所有关于类的私有部分的知识隔离开。避免其它类知道其内部结构 降低编译依赖、提高重编译速度 接口和实现分离 降低模块的耦合度 编译期 运行期 提高了接口的稳定程度 对于库的使用,方法不能改变 对于库的编译,动态库的变更,客户程序不用重新编译
2016-04-11 11:27:37
312
原创 87 智能指针(一)
智能指针本质思想: 将堆对象的生存期用栈对象来管理,当new一个堆对象的时候,立刻用智能指针来接管,具体做法是在构造函数进行初始化(用一个指针指向堆对象),在析构函数中调用delete来释放堆对象。 由于智能指针本身是一个栈对象,它的作用域结束的时候,自动调用析构函数,从而调用了delete释放了堆对象。scoped_ptr#include <boost/scoped_ptr.hpp>#inc
2016-04-11 08:21:04
305
原创 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
276
原创 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
259
原创 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
258
原创 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
268
原创 73 STL(一)
STL六大组件 Container(容器) Adapter(适配器) Algorithm(算法) Iterator(迭代器) Function object(函数对象) Allocator(分配器)七种基本容器: 向量(vector)、双端队列(deque)、列表(list)、集合(set)、多重集合(multiset)、映射(map)和多重映射(multimap)
2016-04-08 11:07:54
275
原创 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
263
原创 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
464
原创 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
236
原创 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
519
原创 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
346
原创 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
370
原创 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
273
原创 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
369
原创 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
316
原创 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
345
原创 41 面向对象版表达式计算器(二)
基于对象编程 值语义 面向对象编程 对象语义值语义对象通常以类对象的方式来使用对象语义对象通常以指针或者引用方式来使用,配合智能指针自动释放对象auto_ptr 所有权独占,不能共享,但是可以转移 shared_ptr 所有权共享,内部维护了一个引用计数 weak_ptr 弱指针,它要与shared_ptr配合使用,循环引用 scoped_ptr 与auto_ptr类似
2016-03-31 11:16:51
435
原创 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
590
原创 35 虚函数与多态(二)
纯虚函数虚函数是实现多态性的前提需要在基类中定义共同的接口 接口要定义为虚函数 如果基类的接口没办法实现(如形状类Shape) 解决办法 将这些接口定义为纯虚函数定义纯虚函数: class 类名{ virtual 返回值类型 函数名(参数表)=0; };纯虚函数不需要实现
2016-03-30 12:04:37
277
原创 34 虚函数与多态(一)
静态绑定与动态绑定静态绑定 绑定过程出现在编译阶段,在编译期就已确定要调用的函数。 动态绑定 绑定过程工作在程序运行时执行,在程序运行时才确定将要调用的函数。 只有通过基类指针或引用调用虚函数才能引发动态绑定#include <iostream>using namespace std;class Base{public: virtual void Fun1() {
2016-03-30 11:26:13
265
原创 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
247
原创 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
271
原创 31 继承(三)
派生类到基类的转换1.当派生类以public方式继承基类时,编译器可自动执行的转换(向上转型upcasting安全转换) 派生类对象指针自动转化为基类对象指针 派生类对象引用自动转化为基类对象引用 派生类对象自动转换为基类对象(特有成员消失) 2.当派生类以private/protected方式继承基类时 派生类对象指针(引用)转化为基类对象指针(引用)需用
2016-03-29 15:34:03
293
原创 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
269
原创 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
288
原创 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
288
原创 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
285
原创 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
332
原创 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
256
原创 23 运算符重载(二)
++运算符重载前置++运算符重载 成员函数的方式重载,原型为: 函数类型 & operator++(); 友元函数的方式重载,原型为: friend 函数类型 & operator++(类类型 &); 后置自增和后置自减的重载 成员函数的方式重载,原型为: 函数类型 & operator++(int); 友元函数的方式重载,原型为:
2016-03-28 09:11:29
238
原创 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
271
原创 22 运算符重载(一)
成员函数与友元函数的运算符重载运算符重载允许把标准运算符(如+、—、*、/、<、>等)应用于自定义数据类型的对象成员函数原型的格式: 函数类型 operator 运算符(参数表); 成员函数定义的格式: 函数类型 类名::operator 运算符(参数表){ 函数体; }友元函数原型的格式: friend 函数类型 operator 运算符
2016-03-27 11:56:08
243
原创 21 友元
友元友元是一种允许非类成员函数访问类的非公有成员的一种机制。 可以把一个函数指定为类的友元,也可以把整个类指定为另一个类的友元。 友元函数在类作用域外定义,但它需要在类体中进行说明 为了与该类的成员函数加以区别,定义的方式是在类中用关键字friend说明该函数,格式如下: friend 类型 友元函数名(参数表); 友元的作用在于提高程序的运行效率#include <math.h>#i
2016-03-25 18:06:45
485
原创 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
297
原创 18 对象的使用(二)
static与单例模式保证一个类只有一个实例,并提供一个全局访问点#include <iostream>using namespace std;class Singleton{public: static Singleton* GetInstance() { if (instacne_ == NULL) { instacn
2016-03-25 12:01:51
272
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人