
c++
文章平均质量分 78
pg_dog
今日有酒今日醉,明日愁来明日愁。
展开
-
C++异常
今天我们来说说C++中有关异常的处理方法,异常的常见用法及特性。 一,有关错误的处理方法返回错误码;终止程序;返回合法值,让程序处于某种非法的状态;调用一个预先设置好出现错误时调用的函数——回调函数;异常处理; 当一个函数发现自己无法解决的错误时抛出异常,让函数的调用者直接或间接的解决这个问题。二,异常的抛出和捕获异常是通过抛出对象来引发的,该对象的类型决定应该激活哪原创 2017-04-22 16:09:15 · 396 阅读 · 0 评论 -
智能指针(下)-----boost库智能指针,定制删除器、循环引用
上一篇我们已经详细讲解了智能指针的基础性知识和auto_ptr的模拟实现。 今天呢我们来讲解boost库的发展。 在C++11标准出来之前,C++98标准中都一直只有一个智能指针auto_ptr,我们知道,这是一个失败的设计。它的本质是管理权的转移,这有许多问题。而这时就有一群人开始扩展C++标准库的关于智能指针的部分,他们组成了boost社区,他们负责boost库的开发和维护。其目的是为C++原创 2017-04-15 16:54:48 · 606 阅读 · 0 评论 -
智能指针(上)-----动态管理内存问题,auto_ptr的模拟实现
今天我们来详解C++中一个重要的知识点——智能指针。文章主要以下面几点来展开:智能指针定义及动态内存的管理智能指针作用auto_ptr的模拟实现智能指针定义 智能指针简单理解就是智能的指针,它可以智能/自动化的管理指针所指向的动态内存的释放。 智能指针和普通指针的区别在于智能指针实际上是对普通指针加了一层封装机制(利用了RAII技术),这样做的目的是为了使得智能指针可以方便的管理一个对象原创 2017-04-13 09:22:29 · 973 阅读 · 0 评论 -
C++继承详解三 ----菱形继承、虚继承
今天呢,我们来讲讲菱形继承与虚继承。这两者的讲解是分不开的,要想深入了解菱形继承,你是绕不开虚函数这一点的。它俩有着什么关系呢?值得我们来剖析。 菱形继承也叫钻石继承,它是多继承的一种特殊实例吧,它的基本架构如下图: 在我们的设想中,D所对应的对象模型应该如下图所示: 下面我们来用一段代码验证一下: class A{public: A() { cout原创 2017-04-17 23:01:25 · 1144 阅读 · 0 评论 -
C++多态(上)——虚函数、虚表
OOP的核心思想是多态性(polymorphism)。其含义是“多种形态”。我们把具有继承关系的多个类型称为多态类型。引用或指针的静态类型和动态类型不同这一事实正是C++语言支持多态性的根本所在。 多态性:当用于面向对象编程的范畴时,多态性的含义是指程序能通过引用或指针的动态类型来获取类型特定行为的能力。多态性在C++中是通过虚函数来实现的。首先我们先来强调几组概念: 静态多态和动态多态、静原创 2017-04-18 15:42:31 · 1271 阅读 · 1 评论 -
C++继承详解二——默认成员函数
在这一篇文章开始之前,我先解决一个问题。 在上一篇C++继承详解之一——初探继承中,我提到了在派生类中可以定义一个与基类成员函数同名的函数,这样派生类中的函数就会覆盖掉基类的成员函数。 在谭浩强的C++程序设计这本书第十一章,351页最下面有这么一段话: 可在派生类中声明一个与基类成员同名的成员函数,则派生类中的新函数会覆盖基类的同名成员,但应注意:如果是成员函数,不仅应是函数名相同转载 2017-04-18 09:37:32 · 1929 阅读 · 0 评论 -
C++实现单链表
之前通过C语言实现了单链表,今天我们来看看C++如何实现单链表? 下面是主代码:#include<iostream>#include<assert.h>using namespace std;typedef int DataType;struct SListNode //创建节点{ DataType data; SListNode* next; SListNod原创 2017-03-23 13:31:02 · 833 阅读 · 0 评论 -
C++实现双向链表
上一篇用C++实现了单链表。今天呢,我们来看看双向链表如何通过C++实现。双向链表也叫双链表,它的的每个数据节点都有两个指针,分别指向直接后继和直接前驱。所以从双向链表中的任何一个节点开始,都可以很方便的访问它的前驱节点和后继节点。#include<iostream>#include<assert.h>using namespace std;typedef int DataType;struc原创 2017-03-25 23:52:37 · 570 阅读 · 0 评论 -
C++模板详解
在平时写代码时,我们总会遇到这种问题:实现一个很简单的功能,但是由于传参过程中不同于形参类型的实参类型会使得你不得写多个功能相似的函数分别去实现他们,这就会造成许多问题,比如代码冗余,函数名太多造成名字空间的污染。这就需要其他方法来解决这种问题。之前在C语言学习中,我们学到了宏这一概念,宏可以一定程度上解决这个问题。但是宏也有它的缺点: 宏替换 宏是在预编译时展开的; 宏只是简单地文本替换;原创 2017-04-09 19:21:07 · 546 阅读 · 1 评论 -
动态内存分配
C语言中内存分配方式1,从静态全局区分配 内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在,例如全局变量,static变量2,在栈上分配 在执行函数时,函数内局部变量的存储单元都可在栈上创建,函数执行结束时这些存储单元自动释放,栈内存分配运算内置于cpu的指令集中,效率高,但分配的内存容量有限3,从堆上分配(动态内存分配) 程序在运行时用ma原创 2017-03-14 12:20:17 · 443 阅读 · 0 评论 -
C++继承详解一 ——继承、继承关系、赋值兼容规则、作用域
C++是一门面向对象的编程语言(OOP),它有三大特性:封装,继承,多态。 今天我来主要详解一下继承。 一,继承概念: 继承机制(inheritance)是面向对象程序设计中使代码可以复用的最重要手段。他允许程序员在保持原有类特性的基础上进行扩展,增加功能。继承是类之间的关系建模,共享公有的东西,实现各自本质不同的东西。这样产生的类叫做派生类,也叫子类。之前的类叫做基类,也叫父类。 二,继承原创 2017-03-30 13:30:29 · 1520 阅读 · 0 评论 -
类的六个默认函数及运算符的重载
希望能帮助到你原创 2017-03-01 23:35:39 · 423 阅读 · 0 评论 -
模板2——顺序表的实现(现代写法的进一步解析,更深层次的深浅拷贝)
之前我们讲解了关于模板方面的知识,今天我们用模板来实现顺序表。 这次顺序表的实现和之前没有太大区别,但还是有几点需要我们来重点进行详解。 我们先来看下面这段代码#include<iostream>#include<string>#include<assert.h>using namespace std;template<typename T>class SeqList {pub原创 2017-04-11 11:45:20 · 518 阅读 · 0 评论