自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Everlasting2016的博客

我流我的汗水 华丽如天花乱坠

  • 博客(15)
  • 收藏
  • 关注

原创 理解dynamic_cast

dynamic_cast是c++中的一种强制类型转换1.详细解释dynamic_cast用于将一个子类对象的指针转换为父类对象的指针或引用(动态转换)向上转型:子类对象->父类指针/引用(不需要转换)向下转型:父类对象->子类指针/引用(用dynamic_cast转型是安全的)2、适用范围(1)dynamic_cast只能用于含有虚函数的类(2)dynamic_

2016-03-27 20:45:18 979

原创 打印虚函数地址的方法

类的定义如下:class Base{public: virtual void func1() { cout << "Base::func1" << endl; } virtual void func2() { cout << "Base::func2" << endl; }private: int a;};class Derive :public Base

2016-03-26 20:14:47 1108 1

原创 C语言实现顺序表

定义顺序表#define MAX_SIZE 5typedef int DataType;typedef struct SeqList{ DataType array[MAX_SIZE]; size_t size;}SeqList;实现的函数声明:void PrintSeqlist(SeqList* pSeq);void InitSeqList(SeqList* pSeq

2016-03-25 23:48:53 361

原创 c++定制删除器

定制删除器其实是利用仿函数一、仿函数是什么?不是函数但可以像函数一样使用,因为重载了operator()简单举例:templatestruct Less{ bool operator()(const T& l, const T& r) { return l < r; }};void Test2(){ Lessless1; cout << less1(1,

2016-03-25 12:05:59 1419

原创 c++继承与组合

一、如果类A 和类B 毫不相关,不可以为了使B 的功能更多些而让B 继承A 的功能。 不要觉得“不吃白不吃”,让一个好端端的健壮青年无缘无故地吃人参补身体。二、如果类B 有必要使用A 的功能,则要分两种情况考虑:(1)若在逻辑上B 是A 的“一种”(a kind of ),则允许B 继承A 的功能。如男人(Man)是人(Human)的一种,男孩(Boy)是男人的一种。那么类Man 可以

2016-03-23 17:36:10 442

原创 is_a原则和has_a原则

一、is-A继承关系:“表示类与类之间的继承关系、接口与接口之间的继承的关系以及类对接口实现的关系”。has-A合成关系:“是关联关系的一种,是整体和部分(通常为一个私有的变量)之间的关系,并且代表的整体对象负责构建和销毁代表部分对象,代表部分的对象不能共享”二、is_a是继承关系,has_a是组合关系(描述一个类中有另一个类型的实例)简单的理解就可以这样:has-a 就是

2016-03-22 22:41:30 2412

原创 模拟实现new、delete和new[] 、delete[]

模拟实现new。deletevoid Test1(){ //1、分配空间 2.显示调用构造函数 AA* p1 = (AA*)malloc(sizeof(AA)); new(p1)AA; //NEW(P1+I)AA(参数列表); //3、析构函数 4、释放空间 p1->~AA(); free(p1);}模拟实现new[]。delete[]

2016-03-22 08:35:13 371

原创 .使用malloc开辟一个3*4的二维数组,并将内容初始化为0-11

方法一·:很容易联想到使用指针数组#define ROW 3#define COL 4void Test(){ int(*p)[ROW] = (int(*)[ROW])malloc(sizeof(int)*ROW*COL); for (int i = 0; i < ROW; ++i) { for (int j = 0; j < COL; ++j) { p[i][

2016-03-21 16:26:36 1664

原创 C语言实现单链表

单链表可以说是基础,有利于对指针的使用结点:typedef int DataType;typedef struct SlistNode{ DataType data; SlistNode* next;}SListNode;实现的函数的声明如下:SListNode* _BuyNode(DataType x);void PrintSlist(SlistNode*

2016-03-21 10:51:16 354

原创 C语言实现双链表

双链表一定要注意,前驱指针,Erase的时候,要判断next是否为NULL,要不然不能使用前驱指针实现了的函数的声明如下:ListNode* _BuyNode(DataType x);void PrintNode(ListNode* pHead);void PushBack(ListNode*& pHead, DataType x);void PopBack(ListNode*& p

2016-03-21 09:22:44 375

原创 String类的深拷贝

每个对象自己开辟自己的空间,自己释放自己的空间class String{public: String(char* str="") :_str(new char[strlen(str)+1]) { cout << "String()" << endl; memcpy(_str, str, sizeof(char)*(strlen(str) + 1)); } ~String

2016-03-20 22:57:42 472

原创 String类引用计数的浅拷贝

模拟new[ ]  在前面多开4个字节来存引用计数class String{public: String(const char* str="") :_str(new char[strlen(str) + 5]) { cout << "String()" << endl; _str += 4; _GetRefCount(_str) = 1; strcpy(_str,

2016-03-20 22:52:41 485

原创 智能指针SharedPtr

引用引用计数的浅拷贝代码如下:templateclass SharedPtr{public: SharedPtr(T* ptr)//这里是正确的,因为是new出来的对象,而String类不是new出来的对象 :_ptr(ptr) // 不写成这样将是错误的,你就新开辟了一份空间,不是以前的空寂 , _pCount(new long(1)) {} ~SharedP

2016-03-20 20:41:53 578

原创 智能指针ScopedPtr

防拷贝的两个条件:1、保护限定符;类外无法定义2.、显示进行声明不进行声明,系统将会自动生成默认的,是浅拷贝这种方法简单,粗暴。不让使用拷贝构造和赋值运算符重载,你进行使用会编译错误代码如下:templateclass ScopedPtr{public: ScopedPtr(T* ptr) :_ptr(ptr) {} ~ScopedPtr()

2016-03-20 20:06:01 404

原创 智能指针AutoPtr

问题:使用系统默认生成的拷贝构造,赋值运算符的重载会发生崩溃,一个指针delete多次的问题解决办法:一个对象给了另外一个对象,将自己释放掉(自己置空),自己释放管理权,保证只释放一次代码如下:templateclass AutoPtr{public: AutoPtr(T* ptr)//注意这里为T :_ptr(ptr) {} ~AutoPtr() {

2016-03-20 19:23:48 484

空空如也

空空如也

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

TA关注的人

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