C++/C
谷大宝
To be a better man !
展开
-
关于string类的深浅拷贝问题
String类深浅拷贝原创 2017-03-28 21:41:39 · 229 阅读 · 0 评论 -
浅谈智能指针shared_ptr
首先什么是智能指针? RAII:资源分配即初始化,通俗点来讲,就是定义一个类来封装资源的分配和释放,再构造函数完成资源的分配和初始化,在析构函数完成资源的清理,可以保证资源的正确初始化和释放。 实现机制:是利用类的构造和析构函数(释放资源)是由编译器自动调用的。 智能指针不仅管理执行对象的释放问题,还可以像指针一样的使用。 C++标准库中主要原创 2017-04-12 18:19:39 · 310 阅读 · 0 评论 -
日期类的实现
代码如下: #pragma once #include using namespace std; #include #include class Date { public: Date(int years = 1900, int month = 1, int day = 1); Date operator+(int day); Date& operator+=(int day); Da原创 2017-04-12 18:04:23 · 239 阅读 · 0 评论 -
程序环境(编译(预处理),链接)
在ANSIC的任何一种实现中,存在两个不同的环境。 第一种是翻译环境,在这个环境中源代码被转换成可执行的机器指令。第二种是执行环境,它用于实际执行代码。 翻译阶段的几个步骤: 1.组成一个程序的每个源文件通过编译过程分别转换成目标代码。 2.每个目标文件由链接器捆绑在一起,形成一个单一而完整的可执行程序。 链接器同时也会引入标准C函数库中任何被该程序所用到的函数,而且它可以搜索程序员个人原创 2016-11-02 18:00:25 · 240 阅读 · 0 评论 -
函数调用原理—栈帧
关于栈 栈在地址空间中是向下生长,向下生长是指是从内存高地址到低地址的路径延伸,栈有栈顶和栈底,所以栈顶的地址要比栈底的地址低,对于x86体系的CPU而言,其中寄存器ebp可称为“帧指针”或“基底指针”,通常指向栈底,寄存器esp可称为“栈指针”,通常指向栈顶。 ebp在未受改变之前始终指向栈帧的开始,也就是栈底。所以ebp的用途是在C堆栈中寻址用的。esp是会随着数原创 2016-11-16 20:49:22 · 298 阅读 · 0 评论 -
关于拷贝函数的实现解析
关于拷贝函数分为两类,一类是strcpy,strncpy,第二类是memcpy,memove,通常情况下,第一类只能处理char,char*的字符串类型,第二种可以处理任意类型,它们四个函数都在C语言的库函数中,头文件为string.h。它们的原型分别如下: char *strcpy( char *strDestination, const char *strSource ); cha原创 2016-12-01 21:35:17 · 492 阅读 · 0 评论 -
继承
继承是面向对象程序设计使代码复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能。 三种成员访问限定符:public,protected,private;继承关系则也有三种:public(公有继承),protected(保护继承),private(私有继承)。 如上图所示,三种继承方式下,不同成员在子类中的访问权限。原创 2017-02-25 18:23:00 · 258 阅读 · 0 评论 -
动态多态以及多态调用过程
多态分为静态多态与动态多态。静态多态包括函数重载,泛型编程。动态是虚函数的使用。 静态多态是指编译器在编译期间完成的,编译器根据函数实参的类型(可能会进行隐式类型转换),可推断出要调用的那个函数,如果有对应的函数就调用该函数,否则会出现编译错误。 动态多态,我们在这里主要说明的是动态多态。 动态绑定:在程序执行期间(非编译器)判断所引用对象的实原创 2017-02-26 15:07:22 · 3888 阅读 · 0 评论 -
类型萃取
在C++中,我们可以通过typeid来获取一个类型的名称,但是不能拿来做变量的声明。在C++中,我们可以通过类型萃取的方式来对内置类型和普通类型进行区分。例如将要看到的例子,如果是内置类型,string类存在浅拷贝的问题,所以必须采用值拷贝,若不是内置类型,则可调用memove拷贝函数来进行拷贝。 struct TrueType { bool Get() { return true;原创 2017-03-27 12:28:20 · 262 阅读 · 0 评论 -
C语言中字符串系列的函数实现以及注意事项
**str系列函数的由来** 字符串是一中重要的数据类型,但C语言并没有显式的字符串数据类型,因为字符串以字符串常量的形式出现或存储于字符数组中。字符串常量很适用于那些不会对它们进行修改的程序。所有其他字符串都必须存储于字符数组或动态内存的分配中。因此就出现了处理字符串的一系列函数,下面让我们一一来认识这些函数。 1、strlen 求字符串长度 字符串长度就是它所包含的字符个数转载 2017-03-28 14:24:24 · 478 阅读 · 0 评论 -
关于String类浅拷贝引用计数问题
前面我们探讨了String类中深浅拷贝问题,相比于浅拷贝来说,深拷贝的效率较低,在深拷贝中,每拷贝一个对象就需要开辟空间和释放空间,赋值运算符重载也一样需要重新开辟和释放空间。可是当拷贝和赋值的对象只用于"读",而不是用于"写",我们就可以不用重新开辟空间。由此,有了引用计数的浅拷贝。 我们需要使用一个变量可以标记同一块空间同时这块空间有多个对象在使用,当析构时,先判断这个标记的变原创 2017-04-08 16:01:17 · 333 阅读 · 0 评论 -
模板&泛型编程
泛型编程:编写与类型无关的逻辑代码,是代码复用的一种手段。模板是泛型编程的基础。 模板分为类模板和函数模板。函数模板代表了一个函数家族,该函数与类型无关,在使用时被参数化,根据实参类型产生函数的特定类型版本。 如上例所示,就是一个简单加法函数的模板,typename是用来定义模板参数的关键字,也可以使用class,T代表着传入实参的类型,可以为int,flo原创 2017-04-15 20:28:16 · 480 阅读 · 0 评论