C++学习
文章平均质量分 60
fern_girl
这个作者很懒,什么都没留下…
展开
-
C++语言 this指针 的学习
一、this指针 首先需要知道this指针是什么? this指针是指向本类对象的指针,它的值是当前被调用的类的成员函数所在的对象的起始地址。 作用:保证不同对象的成员函数引用数据成员时,引用的数据成员是指定的对象的数据成员。 我们也可以通过C语言与C++语言结构体和类的对比来进一步理解this指针 结构体;struc原创 2017-01-16 09:53:26 · 488 阅读 · 0 评论 -
双向链表List---类模板实现
在前面我们用C++中的类来实现了双向链表,C++实现双向链表今天我们用模板类来实现各种可能出现的类型的带头双向链表(容器List)。该链表不仅是带头的双向链表,而且头节点与尾结点构成了循环链表代码如下:/*#pragma once#include<stdio.h>#include<iostream>#include<string>using namespace std;template<cl原创 2017-03-23 19:17:33 · 598 阅读 · 0 评论 -
顺序表---模板类实现
第三种书写方式 1. C语言实现 2. C++实现 3. 类模板实现 接下来我们用类模板来实现STL下的六大组件容器Vector代码如下:#pragma once#include<cstring>#include<iostream>#include<string>using namespace std;template<class T>class Vector{publi原创 2017-03-23 19:00:39 · 449 阅读 · 0 评论 -
适配器Stack----deque/Vector做空间配置器实现
Stack是STL标准模板库中的一种迭代器,有着”先进后出”的特点。 接下来我们分别用deque(双端链表)和Vector(顺序表)来做为Stack的模板参数(底层模板接口)来实现迭代器Stack 用deque实现Stack,deque是由库自己实现,即我们直接利用deque内部已接实现的代码 源代码:#pragma once#include<stdio.h>#include<deque>原创 2017-03-23 19:30:10 · 447 阅读 · 0 评论 -
适配器queue---deque/List做空间配置器实现
用deque(双端链表)实现queue, 源代码:#pragma once#include<stdio.h>#include<deque>#include<iostream>using namespace std;//用双端队列做空间配置器来实现队列template<class T,class Con = deque<T> >class Queue{public: type原创 2017-03-23 19:44:54 · 348 阅读 · 0 评论 -
C++ STL基本容器的使用
本文转载自:C++ STL基本容器的使用 C++中有两种类型的容器:顺序容器和关联容器。顺序容器主要有vector、list、deque等。其中vector表示一段连续的内存,基于数组实现,list表示非连续的内存,基于链表实现,deque与vector类似,但是对首元素提供插入和删除的双向支持。关联容器主要有map和set。map是key-value形式,set是单值。map和set只能存放唯一转载 2017-03-23 19:51:10 · 276 阅读 · 0 评论 -
逆向打印单链表
这里我们将介绍逆向打印单链表的三种方法:利用循环以及三个指针,将单链表的_pNext指针的指向改变(这种方法改变了单链表)利用栈的特性“先进后出”来实现,将链表结点的值全部入栈后再依次出栈利用递归来实现给出结点#include<stdio.h>#include<iostream>using namespace std;//单链表typedef struct Node{ Nod原创 2017-04-10 15:26:12 · 612 阅读 · 0 评论 -
函数模板---上
如果让我们编写一个整型加法函数,我们可以很快的给出代码int Add(const int& left,const int& right){ return (left+right);}但是,我们同时还要求计算出Add(1.0,2.0),Add(“123”,“456”)时,这时上面的那个Add函数将不能满足计算。那么我们将要怎么办呢? 有人说我们可以使用函数重载,还可以使用宏函数替换,还可原创 2017-03-13 23:05:03 · 328 阅读 · 0 评论 -
POD类型的萃取
POD:plain old data平凡类型—基本类型 自我理解POD类型萃取:就是对基本类型的提取,我们在实现一个通用的函数模板时有时对特殊的数据类型要采用特殊的函数体处理,而基本类型数据都可以通过实例化该函数得到想要的结果,所以我们可以将一般的类型提取出来 接下来,我们用程序实例来验证#include<stdio.h>#include<string>#include<iostream>原创 2017-03-26 22:09:59 · 366 阅读 · 0 评论 -
auto_ptr-----智能指针
void FunTest(){ int *p = new int[10]; FILE* fp = fopen("1.txt","rb"); if(fp==NULL) { return;//因为忘记释放p,所以会造成内存的泄漏 } //Dosomething; if(p!=NULL) { delete[]原创 2017-04-04 18:41:49 · 324 阅读 · 0 评论 -
scoed_ptr------防拷贝
防拷贝是用来进行资源管理的第二种方法,第一种是auto_ptr,资源转移auto_ptr,所谓的防拷贝就是不用拷贝构造函数和赋值运算符重载函数;但在类中又不能不写,因为系统会自动合成template<class T>calss scoped_ptr{public: scopedptr(T* ptr) :_ptr(ptr) {} ~scopedptr()原创 2017-04-04 18:52:33 · 360 阅读 · 0 评论 -
obj : error LNK2019: 无法解析的外部符号 "public: __thiscall B::B(void)" (??0B@@QAE@XZ),该符
今天在写类的简单实现时突然遇见这样的问题,最后发现是因为自己忘记实现构造函数的析构函数class B:public A{public: B(); ~B();};出现该错误:obj : error LNK2019: 无法解析的外部符号 “public: __thiscall B::B(void)” (??0B@@QAE@XZ),该符号在函数 _main 中被引用,修改即解决了错误原创 2017-07-15 20:23:22 · 4174 阅读 · 4 评论 -
面试题:C++实现一个不能被继承的类
一个子类继承一个父类,子类的构造函数和析构函数会自动调用父类的构造函数, 先要求设计不能继承的类,即不允许子类的构造函数调用父类的构造函数和析构函数,方法如下:1.直接的方法:将父类的构造函数和析构函数设置为private成员函数 私有成员只能被自身的类访问class A{public: static A* Create() { return new A()原创 2017-07-15 20:51:48 · 603 阅读 · 0 评论 -
学习字符串string类
学习C++ -> string类字符串一、string类字符串的介绍 在程序设计中, 字符串的使用十分频繁, C语言类型字符串(简称C-串)在使用与字符串的处理上较为复杂, C++为了在程序设计中更加方便的使用字符串特新增了一种string类型的字符串。 string类字符串为STL(Standard Template Library, 标准模板库)中的一种自定义的数据类型, 相对于C-转载 2017-07-25 22:36:51 · 341 阅读 · 0 评论 -
C语言实现C++的封装继承与多态
1、 概述 C语言是一种面向过程的程序设计语言,而C++是在C语言基础上衍生来了的面向对象的语言,实际上,很多C++实现的底层是用C语言实现的,如在Visual C++中的Interface其实就是struct,查找Interface的定义,你可以发现有这样的宏定义:#ifndef Interface#define Interface struct#endifC++在语言级别上添加了很多新机转载 2017-07-29 07:53:16 · 868 阅读 · 0 评论 -
C++多态 虚函数
什么是多态? 多态,字面意思理解就是有多种形态。在C++中,多态有静态多态和动态多态两种。 静态多态:也叫静态绑定和早绑定,编译器在编译期间完成,编译器根据函数实参的类型,推断出要调用的那 个函数,如果有对应的函数就调用函数,否则出现编译错误。(有函数重载和泛指编程两种) 动态多态:也叫动态绑定和晚绑定,编原创 2017-03-13 19:00:21 · 251 阅读 · 0 评论 -
C++语言 构造函数 的学习
类中有六个默认的成员函数以后会分别介绍,首先介绍构造函数构造函数 什么是构造函数? 构造函数是一个特殊的成员函数,名字与类名相同,创建类的对象时,由编译器自动调用,在对象的生命周期内只且只调用一次,以保证每个数据成员都有一个合适的初始值。class Date{public: Date() {} Date(int year原创 2017-01-17 10:21:08 · 386 阅读 · 0 评论 -
sizeof与strlen的区别
本文转载自:http://www.cnblogs.com/carekee/articles/1630789.html一、sizeof sizeof(...)是运算符,在头文件中typedef为unsigned int,其值在编译时即计算好了,参数可以是数组、指针、类型、对象、函数等。 它的功能是:获得保证能容纳实现所建立的最大对象的字节大小。 由于在编转载 2017-02-20 21:40:45 · 223 阅读 · 0 评论 -
String类(深/浅拷贝、引用计数、写时拷贝)
首先,我们介绍浅拷贝,又浅拷贝推出深拷贝,引用计数拷贝以及写时拷贝浅拷贝:我们由下面的代码来找出浅拷贝存在的问题 源代码:class String{public: String(const char *pstr = "") { if(NULL == pstr) { _pstr = new char[1]; *_pstr = '\0'; } el原创 2017-02-22 14:43:03 · 394 阅读 · 0 评论 -
C++ 操作符重载 的学习
操作符重载 重载操作符是具有特殊函数名的函数,关键字operator后面接需要定义的操作符符号。 操作符重载也是一个函数,具有返回值和形参表,它的形参数目与操作符的操作数目相 同。表示形式: 返回类型 operator 操作符(参数列表);以下为操作符的重载举例符号+:原创 2017-02-14 19:37:21 · 339 阅读 · 0 评论 -
Access/Modify/Change时间
首先我们在创建一个文件test.c,然后使用stat命令查看文件test.c的各种属性上面就是test.c文件的属性,其中出现的三个时间,Access/Modify/Change含义如下: Access:文件最近一次被访问的时间;当编辑器打开文件时,使用cat,more,less,grep,sed读取文件内容将会刷新 Access的时间,使用l原创 2017-02-14 21:03:01 · 410 阅读 · 0 评论 -
顺序表-----C++实现
#include#include#include#includeusing namespace std;#define DataType intclass Vector{public: Vector() :_pData(new DataType[3]) ,_capacity(3) ,_size(0) {} Vector(const Vector& v) :_原创 2017-03-03 17:46:29 · 246 阅读 · 0 评论 -
双向链表---C++实现
双向链表在类中的实现#include#include#includeusing namespace std;typedef int DataType;struct Node{ Node(const DataType& data) : _pNext(NULL) , _pPre(NULL) , _data(data) {} Node* _pNext; Node原创 2017-03-03 17:48:47 · 517 阅读 · 0 评论 -
C++的虚继承
本文转载自:http://www.cnblogs.com/BeyondAnyTime/archive/2012/06/05/2537451.html1.为什么要引入虚拟继承虚拟继承是多重继承中特有的概念。虚拟基类是为解决多重继承而出现的。如:类D继承自类B1、B2,而类B1、B2都继承自类A,因此在类D中两次出现类A中的变量和函数。为了节省内存空间,可以将B1、B2对A的继承定转载 2017-03-05 08:40:45 · 171 阅读 · 0 评论 -
C++中的继承
继承1.继承的概念 在C++中,所谓“继承”就是在一个已存在的类的基础上建立一个新的类。已存在的类称为“基类”或“父类”,新建立的类称为“派生类”或“子类”。 单继承:一个子类只有一个直接父类时称这个继承关系为单继承; 多继承:一个子类有两个或多个以上的父类时称这个继承关系为多继承 菱形继承(钻石继原创 2017-03-05 10:34:37 · 183 阅读 · 0 评论 -
菱形继承 虚继承
我们由上篇博客介绍了继承的分类,并用文字解释了他们,今天我们将从它们的底层内存分布模板来进一步了解与学习。 单继承:一个类只有一个直接父类 单继承实例:class A{public: int _a;};class B:public A{public: int _b;};void funtest(){ B b; b._a = 2;原创 2017-03-07 13:37:45 · 279 阅读 · 0 评论 -
C++中构造函数、static修饰函数、内联函数、友元函数不能是虚函数
转载自:http://blog.csdn.net/love_gaohz/article/details/7534140inline, static, constructor三种函数都不能带有virtual关键字。inline是编译时展开,必须有实体;static属于class自己的,也必须有实体;virtual函数基于vtable(内存空间),constructor函数转载 2017-03-07 18:37:02 · 471 阅读 · 0 评论 -
异常处理---C语言
程序消亡的一般形式无疾而终(正常退出,例如return 0、点击图标按钮退出)自杀(例如:abort()、exit(0))abort会弹出终端后中断,exit直接一闪而过中断,断言assert可以用abort模拟实现他杀(任务管理器中关闭该程序)C语言传统的错误处理方式终止程序#include<stdio.h>#include<windows.h>#include<iostream>原创 2017-03-27 22:13:23 · 249 阅读 · 0 评论 -
异常处理---C++
C++异常处理:当一个函数发现自己无法处理的错误时抛出异常,让函数的调用者直接或间接的处理这个问题1.异常的抛出与捕获异常是通过抛出对象引发的,该对象的类型决定了应该激活哪个处理代码被选中的处理代码是调用链中与该对象类型匹配且离抛出异常位置最近的那一个void FunTest(){ FILE* fp = fopen("1.txt","rb"); if(NULL==fp)原创 2017-03-27 22:50:07 · 264 阅读 · 0 评论 -
什么情况下析构函数要给成虚函数
转载自:http://blog.sina.com.cn/s/blog_7c773cc50100y9hz.html1.首先看一下这段代码#includeusing namespace std;class ClxBase{public: ClxBase() {}; ~ClxBase() {cout << "Output from the destructor of cla转载 2017-03-07 21:26:55 · 320 阅读 · 0 评论 -
用C语言实现多态
本文转载自: 用C语言实现多态 多态 (polymorphism) 一词最初来源于希腊语 polumorphos,含义是具有多种形式或形态的情形。在程序设计领域,一个广泛认可的定义是“一种将不同的特殊行为和单个泛化记号相关联的能力”。然而在人们的直观感觉中,多态的含义大约等同于“同一个方法对于不同类型的输入参数均能做出正确的处理过程,并给出人们所期望获得的结果”,也许这正体现了人们对于多态性所能达转载 2017-04-07 15:27:38 · 827 阅读 · 0 评论 -
STL中的set和map
原文:http://blog.csdn.net/terence1212/article/details/52487656STL的set和map都是基于红黑树实现的,和stack和queue都是基于deque一样,它们仅仅是调用了RBTree提供的接口函数,然后进行外层封装即可。本篇博客理解起来比较轻松,set和map的源代码也不多,大家可以慢慢“品味”。另外,还会介绍multiset和multima转载 2017-09-05 15:29:48 · 560 阅读 · 0 评论