
c++
文章平均质量分 71
MuYe996
这个作者很懒,什么都没留下…
展开
-
c++函数重载的实现原理
函数重载作为c++的主要特性之一,有着广泛的用途。在此便简单剖析一下函数重载的实现原理。 要考虑这个问题,应从底层去探索。生成一个可执行的程序,主要经过编译和链接的过程,在C语言中是不支持函数重载的实现的,可以通过比较两者具体的编译过程中重命名来探讨这一问题。首先看一段简单的C代码#include<stdio.h> int Add(int a, int b) { return a + b;原创 2017-07-04 18:28:12 · 573 阅读 · 0 评论 -
类型萃取
初次接触类型萃取是在运用模板实现seqlist的时候,拷贝构造和赋值运算符重载时,单纯的使用memcopy(),函数进行拷贝,只是单纯的进行了浅拷贝,对于基本的数据类型是不会有任何错误的,但是如果是string类型时,单纯的值拷贝显然是不行的(超过了给定的buffer空间时),指向了同一块开辟的空间,然后析构时会出现问题。所以一开始直接调用赋值运算符的重载,这样显然不会出现问题,但是对基本的数据类型原创 2017-10-15 12:27:26 · 348 阅读 · 0 评论 -
从1到n中整数1出现的次数
题目描述: 求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1、10、11、12、13因此共出现6次,但是对于后面问题他就没辙了。ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数。解题思路: 求出每位可以出现1的次数,然后把每位可以为1的次数加起来 这里取1个5位数为例:原创 2017-10-23 20:27:52 · 289 阅读 · 0 评论 -
模板为什么不能分离编译
为了实现泛型编程(即与类型无关的代码)在c++中引入了模板这一概念,在写一个项目的时侯我们通常将一个项目分为.h文件(写函数的声明),.cpp文件(函数的定义实现),.cpp(测试文件)。通常情况下普通函数这样是没问题的,但是模板这样写是不行的。 让我们看下会发生什么样的情况:#ifndef __TEMPLATE_H__ #define __TEMPLATE_H__#include <iostr原创 2017-09-27 20:54:37 · 350 阅读 · 1 评论 -
智能指针
在c++中,动态内存的的开辟与释放有人为的去管理的话,有时会出现问题(忘记释放,执行流的跳转…)从而导致内存的泄漏问题。为了解决这一问题引入了智能指针,即开辟与释放是自动完成的。 RAII 智能指针实现的基础,即通过一个类来管理,由对象的构造函数来获取资源(构造即初始化),析构函数去释放资源。 智能指针就是基于这样的机制,当然指针的基本功能智能指针也会拥有。 auto_ptr,带有严重缺陷原创 2017-08-13 18:28:32 · 200 阅读 · 0 评论 -
string类深拷贝,写时拷贝
在实现string类时不能用简单的浅拷贝去实现,因为浅拷贝会简单让两个对象指向同一块空间,这样的缺陷是两者指向同一块空间,析构时会出现程序崩溃的问题,两个对象管理同一块空间,一改都改,这显然是你所不期待的。 所以深拷贝就应运而生,所谓的深拷贝就是在用A对象拷贝B对象时,为B对象开辟与A对象一样大的空间,大家各自管理自己的空间。 下面简单的去实现一下深拷贝。#include<iostream> #原创 2017-07-25 20:56:25 · 378 阅读 · 0 评论 -
多态&多态对象模型
(动态)多态:当使用基类的指针或引用调用重写的虚函数,当指向父类调用的就是父类的虚函数,指向子类调用的就是子类的虚函数。 不难剖析出要实现多态: 首先要有虚函数的重写,其次要用基类的指针去调用。那么先简单认识下虚函数&虚函数的重写: 虚函数:类的成员函数加了 virtual 关键字。 虚函数的重写:当在子类中定义了一个与父类完全相同的虚函数时,则称子类的这个函数重写(也称覆盖)了父类的虚函数原创 2017-08-01 22:16:28 · 294 阅读 · 0 评论 -
c++动态内存管理
在介绍c++的动态内存管理之前先简单的了解一下C语言是如何进行动态内存管理的。在C语言中动态内存的开辟依赖于malloc/realloc/calloc/free这几个函数对动态内存进行管理。malloc&calloc malloc的函数原型: void* malloc(unsigned int size) 从函数原型中可以看出,malloc函数的会在堆空间中开辟 size 字节的空间,并返回 vo原创 2017-07-21 11:24:49 · 258 阅读 · 0 评论 -
继承
继承作为面向对象的三大特性之一,是面向对象复用的重要手段,通过继承定义一个类,继承是类型之间的关系建模,共享共有的东西,实现各自本质不同的东西。继承是一种复用手段,在继承关系里,基类继承派生类的成员,以此来达到复用的效果。先看一段简单的继承: 简单认识下继承实现复用, 成员访问限定符&继承关系 三种继承关系下基类成员的在派⽣类的访问关系变化 简单的总结下: 三种继承关系:public,原创 2017-07-28 22:26:38 · 323 阅读 · 0 评论 -
c++类的默认构造函数(前三个:构造,拷贝构造,析构)
在介绍c++的默认构造函数之前呢,先简单的说下this指针。 · this指针 1.每个成员函数都有一个指针形参,它的名字是固定的成为this指针,this指针是隐式的(构造函数比较特殊,它不含this指针)。 2.编译器会对成员函数进行处理,在对象调用成员函数时,它会将对象的地址作为实参传递给成员函数的第一个形参this指针。 3. this指针是成员函数隐含指针形参,是编译器⾃原创 2017-07-17 11:35:20 · 2084 阅读 · 0 评论 -
指针与引用
指针有能力指向一块内存,它有能力指向一个地址。 引用是一个对象的别名,本身并没有开辟一块新的空间,其实质上也是一个地址。下面介绍指针和引用的区别(1)指针可以为空,但引用是不可以的,因此在定义一个引用时必须为其初始化,否则连编译都无法通过。#include<iostream> using namespace std;int main() { int a = 10; int& b;原创 2017-07-05 11:17:39 · 322 阅读 · 0 评论 -
定制删除器
定制删除器的产生:在实现智能指针的过程中,我们需要管理数据的构造以及析构,但不同的数据拥有不同的析构方式,例如文件,new出来的空间等等,在利用模板编程中,我们需要识别不同的数据类型,然后选择合适的删除机制,做到一一对应。定制删除器的实现利用了仿函数,如果你不知道仿函数的话,可以阅读下面的一小部分。仿函数:其原理是重载了(),让它可以像函数一样使用。 看一段简单的代码:#include <iost原创 2017-10-16 19:31:07 · 609 阅读 · 0 评论