自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

小葱的博客

每一个不曾起舞的日子都是对生命的辜负。。。

原创 关于对象模型的几个面试题(很基础,但坑较多)

可能是因为光是看书,关于看到的知识点也不会去深思各种各样的场景去构造,导致遇到一些很基础的问题都会犯二,写此篇博客,特警示自己: 学知识,最重要的是思考!!!如果关于对象模型你还有那么一点兴趣,那么可以继续向下看,看看自己是否可以完全答对。。。1.面试题(选择题):下面我贴出的是主要的代码片,头文件以及using namespace std;需要自行添加哦!class A{public :

2017-04-08 00:09:27 1319 1

原创 浅谈shared_ptr及shared_ptr涉及到的循环引用问题

起初在C++标准库里面是没有智能指针的,直到C++11才加入了shared_ptr和unique_ptr以及weak_ptr。最早的智能指针在Boost库里面,Boost库是为C++标准库提供扩展的一些C++程序的总称,由Boost社区组织开发维护。  shared_ptr与scoped_ptr一样包装了new操作符在堆上分配的动态对象,但它实现的是引用计数型的智能指针 ,可以

2017-04-05 00:30:23 6577 7

原创 浅谈auto_ptr智能指针

在c++标准库里主要有三个智能指针:①auto_ptr在任何情况下都不要使用②scoped_ptr独占空间,防拷贝和赋值,是对第①个智能指针的缺陷所作出的解决③shared_ptr利用引用计数,和其他对象共享一块空间(与weak_ptr结合使用)这篇文章主要的内容是讲解auto_ptr所引出的一系列问题:一、AutoPtr智能指针

2017-04-02 00:20:26 10415 2

转载 虚函数和纯虚函数的区别

转自:http://blog.csdn.net/hackbuteer1/article/details/7558868首先:强调一个概念定义一个函数为虚函数,不代表函数为不被实现的函数。定义他为虚函数是为了允许用基类的指针来调用子类的这个函数。定义一个函数为纯虚函数,才代表函数没有被实现。定义纯虚函数是为了实现一个接口,起到一个规范的作用,规范继承这个类的程序员必须实现

2017-03-29 19:36:14 215

原创 浅析粘滞位

在了解粘滞位之前,我们先来回忆一下一个文件具有的三种权限,在Linux下有一种一切皆文件的思想,所以,这里的文件包含普通文件和目录了:一、文件权限:r  :可以读这个文件的内容w :可以编辑这个文件的内容,包括增加和删除文件的具体内容x :可执行权限。(需注意:在windouw下,文件的可执行权限是通过文件的扩展名表示出来的,而在Linux下是由这个X权限所决定的)。

2017-03-29 12:50:06 393

原创 Linux下查找文件的命令

Linux下文件的查找命令:Which查看可执行文件的位置。whereis查看文件的位置。(只能用于查找程序名)locate配合数据库查看文件位置。Find实际搜寻硬盘查询文件名称。一、脚本文件名的查找:1.which(查找“可执行文件”)which是根据用户所设置的PATH变量内的目录去查找可执行文件的。 可执行

2017-03-29 01:03:43 335

原创 linux基本指令总结(二)

1.basename 路径名/文件名 作用:在一串字符中提取文件名2.dirname 路径名/文件名作用:(处理路径)在一串字符中提取父目录3.more指令类似cat的功能(显示文件的内容),又有之不同,就是more是一页一页的显示,而且按(上下左右箭头没有效果),可以按(Enter/space)来翻页(向下翻)。 more +5 file1(more +n filename) 作用:从第

2017-03-25 00:18:46 391

原创 模板实现冒泡(不同类型的元素)排序

真是学着忘着,学着忘着… 学的东西已经快要忘光了,说到底,还是自己没有深刻的理解并掌握。 提醒自己:再简单的知识你不会就是不会,永远不要对学过的小知识或者简单的知识不屑一顾,可能下次你跳进的坑就是这些小的知识点为你而挖的。#pragma once#define _CRT_SECURE_NO_WARNINGS 1#include<iostream>using namespace std;te

2017-03-23 00:55:00 231

原创 单链表的基本操作

无论做的事情有多简单亦或是有多难,都应该保持一颗平常心,如果问题很简单,那么就需要去思考可不可以更简单,例如:编程,人们都喜欢那些写的很简洁且易看懂的代码,下面我做的就是这样的事情。当然,由于个人能力问题,可能会有些许问题,还请各位亲们批评指教。声明:下面代码的测试平台:vs2013//SList.h#pragma once#define _CRT_SECURE_NO_WARNINGS 1#in

2017-03-22 12:43:56 165

转载 全面了解setjmp与longjmp

转自:http://blog.itpub.net/7235683/viewspace-851455/实际上goto语句是面向过程与面向结构化程序语言中,进行异常处理编程的最原始的支持形 式。后来为了更好地、更方便地支持异常处理编程机制,使得程序员在C语言开发的程序中,能写出更高效、更友善的带有异常处理机制的代码模块来。于是,C语 言中出现了一种更优雅的异常处理机制,那就是setjmp()函

2017-03-21 14:06:23 354

转载 各种网页错误代码解释(400.404.504等) (感觉总结的很全,转过来看看)

转载自:http://blog.sina.com.cn/s/blog_6721f25c0100mxq1.html IIS状态代码的含义 概要 当用户试图通过HTTP或文件传输协议(FTP)访问一台正在运行Internet信息服务(IIS)的服 务器上的内容时,IIS返回一个表示该请求的状态的数字代码。该状态代码记录在IIS日志中,同时也可能在Web浏览器或FTP客户端显示。状态代码可

2017-03-21 11:21:50 866

原创 剑指offer-->第46题

题目如下:求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。第一种方法: (我觉得最简单的方法)运用逻辑运算和递归思想int Sum_Solution(int n){ int ans = n; ans && (ans += Sum_Solution(n - 1)); return an

2017-03-20 01:11:46 174

原创 Linux下关于文件的三个时间(atime/ctime/mtime)

首先:必须声明一点:这篇文章的内容也有网上的一些大神总结的东西, 而我自己是在查阅了好多资料后才总结出来的,其中肯定会引用一些我觉得写的很好的。首先,介绍一下关于目录权限的问题: 关于目录的访问权限:你创建目录其实就是为了在其目录下创建文件或者是创建子目录,那么你需要给出此目录的三种权限(可读、可写、可执行)。 还有一种情况:你创建的目录,希望和你同组的成员或者别人可以看到你目录下的内容,

2017-03-20 01:00:21 517

原创 误将/root剪切复制到其他目录下出现bash-4.1# 如何修改

在练习指令时,因为不小心把/root剪切到了其他目录下, 从而出现bash-4.1# 。可以通过以下命令来进行修改,将其恢复: 先打开终端,进入一般用户的主工作目录,然后 pwd(可以查看当前目录)将下图中需要拷贝(cp)的东西拷过去即可。bash-4.1# cd /home/wxbash-4.1# cp ./.bashrc /rootbash-4.1# cp ./.bash_profi

2017-03-19 10:15:02 203

原创 剑指offer面试题1

赋值运算符函数题目:如下为类型CMyString的声明,请为该类型添加赋值运算符函数。class CMyString{public : CMyString(char* pData = NULL); CMyString(const CMyString& str); ~CMyString(void);private : char* m_pData;};解答思路如

2017-03-17 00:40:14 252

原创 鸟哥的私房菜随笔

刚开始学Linux,就已经喜欢上了这种只需输入命令就可以完成各种各种操作的操作系统,不需要像windows一样,需要用鼠标点击的操作, 在Linux下只需要几行指令就可以完全搞定。 下面是在看鸟哥的私房菜时写的一些随笔,希望可以帮助到你。 1.linux一般将文件可存取访问的身份分为3个类别:owner /group/others/ 且3种身份各有read /write/execu

2017-03-16 00:10:45 435

转载 C++ 虚函数表解析

陈皓 http://blog.csdn.net/haoel前言C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,RTTI技术,虚函数技术,要么是试图做到在编译时决

2017-03-14 16:20:10 181

原创 日期类

1.关于日期d1-d2所得差值的思路总结:方法一:重载一个自增运算符,然后使用计数器来计算两个日期之间的差值。 因为比较简单,就直接看代码!int Date::operator-(const Date& d1)//两个天数相减(形如:d1-d2){ int flag = 1; if (d1 > *this) { flag = -flag; }

2017-03-12 20:43:27 196

原创 初识模板

泛型编程:编写与类型无关的逻辑代码,是代码复用的一种手段。 模板是泛型编程的基础。 模板:函数模板和类模板。模板是一个蓝图,它本身不是类或者函数,编译器用模板产生指定的类或者函数的特定类型版本,产生模板特定类型的过程称为模板实例化。 一、函数模板函数模板参数:模板类型参数和非模板类型参数。 模板类型参数:1.在模板的定义中,模板参数不能为空;2.模板类型形参可作为类型说明符用在模

2017-03-12 01:02:21 227

转载 为什么C++编译器不能支持对模板的分离式编译

转自:http://blog.csdn.net/pongba/article/details/19130首先,一个编译单元(translation unit)是指一个.cpp文件以及它所#include的所有.h文件,.h文件里的代码将会被扩展到包含它的.cpp文件里,然后编译器编译该.cpp文件为一个.obj文件(假定我们的平台是win32),后者拥有PE(Portable Executable,

2017-03-11 19:17:32 143

原创 深浅拷贝以及引用计数

标准库类型string表示可变长的字符序列,使用string类型必须首先包含它的头文件。 作为标准库的一部分,string定义在命名空间std中。#include<string>//注意这里没有.husing namespace std;下面让我们一起来模拟string类中的几个比较重要的成员函数,一步一步的剖析它们的实现机制: 1.构造函数:示例①class String{publ

2017-03-07 01:02:37 222

原创 动态内存管理(new/delete)

拖了这么久,终于有时间把这块的东西总结一下,已经大三下学期了,留给我的时间已经不多了,希望可以抓住大学时光的尾巴,不负父母的殷切期望!首先让我们来看看内存的分配方式都有哪些?内存的分配方式:①从静态存储区域分配。内存在程序编译的时候就已经分配好了,这些内存在程序整个运行期间都存在,如:全局变量、static变量。②在堆栈上分配。在函数执行期间,函数内部变

2017-03-04 09:12:10 323 2

原创 多态+菱形虚拟继承(下)

对象的类型:在这里先来看一下在继承体系中搞的人晕头转向的几个术语:下面让我们一起进入多态的世界 多态(polymorphism)一词最初来源于希腊语polumorphos,含义是具有多种形式或形态的情形。我们把具有继承关系的多个类型称为多态类型。 引用或指针的静态类型与动态类型不同这一事实正是c++语言支持多态性的根本所在。 1、多态分为静态多态和动态多态。

2017-03-02 23:38:22 201

原创 多态+菱形虚拟继承(下)

对象的类型:在这里先来看一下在继承体系中搞的人晕头转向的几个术语:下面让我们一起进入多态的世界 多态(polymorphism)一词最初来源于希腊语polumorphos,含义是具有多种形式或形态的情形。我们把具有继承关系的多个类型称为多态类型。 引用或指针的静态类型与动态类型不同这一事实正是c++语言支持多态性的根本所在。 1、多态分为静态多态和动态多态。

2017-03-02 23:36:43 204

原创 多态+菱形虚拟继承(下)

对象的类型:在这里先来看一下在继承体系中搞的人晕头转向的几个术语:下面让我们一起进入多态的世界 多态(polymorphism)一词最初来源于希腊语polumorphos,含义是具有多种形式或形态的情形。我们把具有继承关系的多个类型称为多态类型。 引用或指针的静态类型与动态类型不同这一事实正是c++语言支持多态性的根本所在。 1、多态分为静态多态和动态多态。静态多态和动态多态还有下面的

2017-03-02 00:13:51 867 3

原创 继承*菱形继承与菱形虚拟继承(上)

面向对象程序设计的核心思想是封装(数据抽象)、继承和多态(动态绑定)。 通过使用数据抽象,我们可以将类的接口与实现分离; 使用继承,可以定义相似的类型并对其相似关系建模; 使用动态绑定,可以在一定程度上忽略相似类型的区别,而用统一方式使用它们的对象。简单的说,继承的使用就是为了代码复用。 1.继承 ①继承机制:是为了扩展原有类,增加新的功能。 ②继承的定义格式: 子类名:

2017-02-27 22:26:41 2247

原创 类的构造函数

首先让我们来了解一下类的默认成员函数都有哪些?下面来详细了解构造函数的特性和使用方法。 一.构造函数:是一个特殊的成员函数,由编译器自动调用。①构造函数的作用: a.创建对象; b.初始化对象; c.类型转换;②构造函数的特性: a.函数名与类名相同;b.无返回值;c.可以重载;(ps:无参的构造函数和全缺省值的构造函数都认为是缺省构造函数,并且缺省的构造函数只能有一个)。d.构造函数

2017-02-27 22:06:04 366

原创 类中非静态成员函数中的----this指针

首先思考一下在c++中,编译器是如何识别一个类的? 识别一个类可以分为一下三步? ①识别类名; ②识别数据成员; ③识别成员函数并将其改写。引出的问题:类中的数据成员相当于全局变量,但是全局变量在使用之前,必须先定义,而类中的数据成员的位置可以任意,这就是因为识别类时的顺序而导致的区别。我们都知道类中成员函数和数据成员的存储方式: 类的大小包括非静态数据成员而不包括成员函数

2017-02-15 23:32:44 2721

原创 关于引用的那些事

刚开始接触c++,首先一定会了解引用,引用是c++扩展的一个变量类型,通俗点讲,就是变量的别名,与变量共享一块空间。有人可能会想,这很简单呀,不就是变量的别名吗?其实,引用最多的使用并不是作为变量的别名,而是作为函数的形参,可以实现通过函数调用来改变实参变量的值,怎么听起来这么熟悉呢,对了,你可能想起来通过指针也可以改变实参变量的值,那让我们来看看引用和指针有哪些联系和区别呢?1.引用(refer

2017-01-20 15:22:16 343

原创 c/c++函数名字修饰规则初探

开始接触c++时,遇到的一个问题就是:为什么c++可以支持重载?而c语言却不可以?这个问题看似很简单,但是具体让你讲解的话,你可以问问自己,可不可以不加思考的道出一切缘由?如果不可以,那么恭喜你,这篇文章你看完之后,一定会懂得这是为什么,如果你明白,那么这篇文章你就不需要看了。首先,这是由于c/c++函数名字在编译时的修饰规则不同,函数的名字修饰(Decorated Name)——编译器在编译期间

2017-01-15 22:12:51 653

原创 单链表的面试题总结--------图形解析

1.// 删除无头单链表的非尾结点,要求:不能遍历单链表因为没有头结点,所以不能用固有的思维去考虑这个问题,因为是单链表,所以不能由链表中的后一个节点去找前一个节点, 所以这时需要转化一种思维,不能删除一个节点的前一个节点,但是可以去删除一个节点的后一个节点, 首先应该判断pos是否为空,如果为空,直接返回,如果不为空,分析如图示(利用转换思想)在这里还应该思考:为什么是删除非尾节点?—-如果

2017-01-02 00:57:42 567

原创 单链表的基本操作-----图形解析

首先我们需要思考的是为什么需要单链表呢? 单链表和顺序表相比较,又有什么优点呢? 在顺序表中,当我们需要头插,或者在顺序表的中间位置插入元素时,就必须将后面的元素一一后移,再将需要插入的元素插入进去。 可是这样的效率明显较低,所以我们就想到了单链表这种结构,可以将在物理地址上不连续的数据连接起来,需要连接,那么就需要有一个保存下一个元素地址的指针,想了想后,发现没有这样的内置类型可

2016-12-31 01:12:28 11745 2

原创 将字符串转换为整数

或许一听到这个问题,很多人可能会说:这很简单呀,可是我用自己做了实验,结果战况惨烈,下面是我从看到这道题到最终考虑各种条件后所写程序的历程,希望可以对你有一点启示。一开始我的思路是:要将一个字符串转换为整数❶ 首先判断字符串的第一个字符,是‘+’或者‘-’,定义一个变量来表示转换出来后整数的正负,如果第一个字符既不是‘+’也不是‘-’,那么就默认是正数。❷接下来判断下一个字

2016-12-25 17:07:41 332

原创 注释转换

用状态机将c语言的注释转换为c++的注释先来了解一些状态机的概念。状态机:就是一组 状态,各个状态之间,依据一定的条件,(如输入一个 1 或者是 0)存在一定的转换,(从状态X转换到状态Y)它有 一个 起始状态和 若干 终结状态,从起始状态开始,根据输入的串转换状态,直到所有的输入的被状态机处理,看看追最后停留的状态是否为终结状态,是的话就说这个 串

2016-12-17 16:34:49 248

原创 通讯录终极版(文件)

之前我已经写过了两篇通讯录,第一篇只是简单的实现通讯录的一些操作,使用顺序表,但是它存在的缺点是向通讯录添加的人数是固定的,当通讯录满的时候就不能再添加了。      这时才有了第二篇,第二篇是在第一篇的基础上改进的,给通讯录动态开辟空间,当通讯录满的时候还可以追加内存空间。      不过第二版也有它的缺点,那就是每次执行程序时你都必须把通讯录中的成员信息再重新输入一遍,当通讯录中的人员

2016-12-17 16:12:55 346

原创 c语言练习题(面试题)

5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果A选手说:B第一,我第三。B选手说:我第二,E第四。C选手说:我第一,D第二。D选手说:C最后,我第三。E选手说:我第四,A第一。比赛结束后,每位选手都说对了一半,请编程确定比赛的名次。解析如下:这道题的想法是这样子的,利用穷举的方法列出所有的情况,可以使用一种比较简单的思维去考虑这个问题,定义5个变量,使

2016-12-09 22:42:19 221

原创 可以动态增长的通讯录(在第一版的基础上进行了改进)

在第一版中,我将通讯录可以保存的人的数量设置为定长,这样具有很大的缺陷,那就是当通讯录满的时候没有办法再增加人的信息,或许会有人说,那我再修改数组的大小就好了,但是你要修改为多少才会合适呢?有人说我把数组的大小扩大为原来的两倍,这样是可以存储更多的信息,但是如果我只需要再增加一个人的信息,那给数组开辟的空间不是就会浪费掉吗?        所以才会有第二版的动态增长型的通讯录,这样你需要多少空

2016-12-06 11:17:32 246

原创 动态内存分配

为什么会有动态内存分配?这是因为当你声明一个数组时,你必须使用一个编译时常量指定数组的长度,但是,数组的长度常常在运行时才知道,这是因为它所需要的内存空间取决于输入数据。而且这种方法人为的进行了数组大小的限制。

2016-12-04 08:49:58 367

原创 用顺序表实现的简易通讯录(第一版)

实现一个通讯录;通讯录可以用来存储1000个人的信息,每个人的信息包括:姓名、性别、年龄、电话、住址提供方法:1.    添加联系人信息2.    删除指定联系人信息3.    查找指定联系人信息4.    修改指定联系人信息5.    显示所有联系人信息6.    清空所有联系人7.    以名字排序所有联系人//addressbook.h

2016-12-01 10:26:53 4746 1

原创 关于sizeof和strlen()那些年我们都迷惑过的问题

首先,使用sizeof之前,我们一定要搞清楚一个问题,那就是sizeof是一个关键字或者操作符,而不是好多人认为的所谓的函数, sizeof任意类型的变量,都是求取这个变量所占的字节大小,注意:它求的是这个变量占空间大小的字节数。 而strlen()是一个函数,任何值作为它的参数,都会被强转为const char*类型的,它是为了求取字符串长度而产生的,这里应该注意 我们都知道

2016-11-28 18:10:43 402 1

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