c++
chan0311
这个作者很懒,什么都没留下…
展开
-
类中函数的一个隐含参数--this指针
为什么会有this指针呢?我们需要来看一段代码感受一下。#include <iostream>using namespace std;class Student { public: void InitStudent(char *name,char*gender,int age) { strcpy(_name,name); stcpy(_gender,gender); _原创 2017-03-11 19:29:26 · 4970 阅读 · 0 评论 -
C++实现单链表
单链表相对于顺序表,多了一个next指针,用来连接数据,构成链式结构 下面是代码#include<iostream>#include<assert.h>using namespace std;typedef int DataType; struct SListNode { SListNode* _next; DataType _data; SListNode(D原创 2017-07-20 14:26:23 · 365 阅读 · 0 评论 -
C++实现双链表
双链表主要实现了头插,头删,尾插尾删,任意位置的插入删除,链表的逆置以及链表的深浅拷贝在这里说明一下,链表用的最多的就是数据的插入什么的,所以这里解决深浅拷贝问题,用的是深拷贝,单链表,顺序表也是一样,都是用了深拷贝。 双向链表相比较于单链表而言,相对复杂一点,有两个指针,来进行实现链式结构 先面试具体代码#include<iostream>#include<assert.h>using n原创 2017-07-20 18:51:10 · 285 阅读 · 0 评论 -
菱形继承的二义性和数据冗余问题
什么是继承继承是面向对象复用的重要手段。通过继承定义一个类,继承是类型之间的关系建模,共享公有的东西,实现各自本质不同的东西。 继承的方式分为: 公有继承、保护继承、私有继承 总结: 1.基类的私有成员在派生类中是不能被访问的,如果一些基类成员在类外不想被基类对象直接访问,但需要在派生类中能访问,就定义为保护的。可以看出保护成员限定符是因为继承才出现的。 2.public继承是一个接口原创 2017-07-20 22:57:52 · 541 阅读 · 0 评论 -
C++中的多态和多态对象模型
什么是多态所谓多态,也就是说“多种形态” C++中虚函数就是为了实现多态 虚函数–类的成员函数前面加上virtual关键字,则这个函数就是虚函数 多态的形成条件: 1、虚函数的重写 2、父类的指针或者引用调用重写的虚函数 例如:A*p = & b; A是一个父类,b是一个子类对象 这个时候就是形成了多态。这个时候调用函数与类型无关,只与指向的对象有关,指向谁就调用谁。虚函数的重写:当子原创 2017-07-27 21:03:05 · 370 阅读 · 0 评论 -
C++中模板为什么不支持分离编译
程序运行的过程首先我们知道, 一个程序的执行过程分为四个部分,预处理,编译,汇编,链接 下面用一副图来说明末班的分离编译这里就是普通的代码,是可以进行分离编译的,但是为什么在模板中就不可以了呢,下面我们来看一段简单的代码,来进行分析//template.htemplate<class T>class AA{public: AA();private: T _a;};//原创 2017-08-05 15:12:24 · 357 阅读 · 0 评论 -
C++中的类型转换
C++中的类型转换:static_cast、reinterpret_cast、const_cast、dynamic_xast一般情况下我们写的类型转换,就是加上一个圆括号 float a;int b =(int)a; 但是这样有缺陷:因为所有的形式都是一样的。所以可视性就会很差,如果发生错误,不容易找到错误的原因。所以c++引入了强制类型转换操作符。上面的四种。Static_cast它用于非多态原创 2017-08-24 19:05:15 · 295 阅读 · 0 评论 -
为什么经常用const来代替宏
常量:是一种标识符,值在运行期间不变。C语言用#define,C++也可以用,它还可以用const来表示常量。 常量可以使程序的可读性变强,想一下如程序中全是变量字符串,会不会很麻烦呢?我们写程序会相当复杂。 宏和const具体就不介绍怎么使用了。注意的是,宏后面没有分号,const有的。const和宏的比较:1.const是有类型的,而宏是没有的。它等于是给某个数字或者字符串用特定的名字来表示原创 2017-12-10 20:45:41 · 2794 阅读 · 0 评论 -
指针和引用
引用:就是给已经存在的变量起一个别名 定义的格式:类型&引用变量名 = 已定义过的变量名。 引用的特点:1、一个变量可以取多个别名 2、引用必须初始化 3、引用只能在初始化的时候引用一次,不能改变为再引用其他的变量(从一而终)可以引用一个引用的变量(别名的别名):int& b = a; int &c = b;const...原创 2018-04-03 12:17:12 · 167 阅读 · 0 评论 -
C++实现顺序表
顺序表可以看做是一个数组用来存放数据下面用C++来实现顺序表#include<iostream>#include<assert.h>using namespace std;typedef int DataType;class SeqList//顺序表{private: DataType*_array; size_t _size; size_t _capacity;原创 2017-07-20 14:21:10 · 640 阅读 · 0 评论 -
C++对传参和传返回值时构造的优化处理
首先来介绍一下C++中的四个默认函数(1) 构造函数 成员变量为私有的,要对它们进行初始化,必须用一个公有成员函数来进行。同时这个函数应该有且仅在定义对象时自动执行一次,这时 调用的函数称为构造函数(constructor) 。 构造函数是特殊的成员函数,其特征如下:a. 函数名与类名相同。 b. 无返回值。 d. 构造函数可以重载。 e.构造函数可以在类中定义,也可以在类外定义原创 2017-07-12 20:14:37 · 813 阅读 · 0 评论 -
C++中的继承
1.什么是继承简单点的说子承父业嘛,这就是继承。所以在C++中也是一样的,继承机制是面向对象程序设计使代码可以复用的重要手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,称为派生类。继承呈现了面向程序设计的层次结构,体现了由简单到复杂的认知过程。2.继承的定义格式3.派生类的大小下面给出一段代码和他的运行结果//.h#include<iostream>using namespace原创 2017-04-09 01:19:27 · 500 阅读 · 0 评论 -
智能指针
什么是智能指针智能指针(smart pointer)的一种通用实现技术是使用引用计数(reference count)。智能指针类将一个计数器与类指向的对象相关联,引用计数跟踪该类有多少个对象的指针指向同一对象。 提到智能指针就会想到RAII,但是要明白,智能指针并不等同于RAII,智能指针只是RAII的一种应用。而RAII则是一种规范。 是一种用来解决问题的思想,定义类来封装资源并进行分配和释原创 2017-05-09 23:06:09 · 488 阅读 · 0 评论 -
C++中的模板(上)
1.什么是模板模板是C++支持参数化多态的工具,使用模板可以使用户为类或者函数声明一种一般模式,使得类中的某些数据成员或者成员函数的参数、返回值取得任意类型。 模板是一种对类型进行参数化的工具;通常有两种形式:函数模板和类模板;函数模板针对仅参数类型不同的函数;类模板针对仅数据成员和成员函数类型不同的类。 使用模板的目的就是能够让程序员编写与类型无关的代码。比如编写了一个返回类型为int参数为i原创 2017-05-03 22:07:44 · 690 阅读 · 0 评论 -
C++模板(下)
模板类<1>模板类的格式template <class T1,class T2,...>class//类名{};我们之前实现过顺序表,链表,为了方便以后通用,我们会定义一个新的 datatyppe 类型的来代替 int,以后要改变类型的话,就直接在声明中改变就好,学了模板后,我们就可以使用更方便的方法,就是用模板实现顺序表,链表,使代码的复用率大大提高。template <class T>c原创 2017-05-06 17:36:45 · 672 阅读 · 3 评论 -
C++中迭代器失效的问题
什么是迭代器失效呢,首先迭代器的失效是指在容器内进行插入元素或者删除元素之后,迭代器不能正常的访问或遍历数据,使其失去了本来的功能。我们常见的迭代器失效,比如在vector 的插入数据和删除数据,会导致迭代失效,,在链表里删除数据时,也会导致迭代器失效,,今天我们重点看在vector和list里的迭代器失效。 一,vector中删除一个元素,会导致迭代器失效,,具体看图 那么我们该如何解决转载 2017-05-31 12:06:21 · 734 阅读 · 0 评论 -
初识C++
作用域第一次接触C++相信大部分人都是会用到using namespace std;这句代码。就是命名空间,那么为什么会使用这个呢?首先我们先来了解一下作用域这个概念。然后再来说命名空间。在C语言中,我们知道,有三个层次的作用域,即文件(编译单元),函数和复合语句。C++中又引用了类作用域,类是出现在文件内的。通俗点讲就是每个大括号范围内的内容就可以看作是一个域。在不同的作用域中可以定义相同名字的变原创 2017-06-29 20:35:07 · 297 阅读 · 0 评论 -
C++中的动态内存管理
malloc/free和new/delete之间关系和差异相同点:都可用于申请动态内存和释放内存 不同点:(1)操作对象不同 malloc/free是C++/c语言的标准库函数,new/delete是c++的运算符,对于非内部数据类型的对象而言,只有malloc、free是无法满足动态对象的要求的。因为对象在创建的时候会自动调用构造函数,对象消亡时会自动调用析构函数。因为malloc/free是库原创 2017-07-14 18:55:01 · 507 阅读 · 0 评论 -
引用计数的写时拷贝
什么是写时拷贝首先我们需要知道什么是写时拷贝,写时拷贝,通俗点说也就是写的时候拷贝。那么什么是写的时候拷贝呢,这又是什么意思呢? 举个例子,创建一个日期类的对象,然后又用这个对象拷贝构造了多个对象,也就是说这几个对象所指向的是同一块空间,那么当你对其中一个对象进行读操作的时候,什么问题都不会有,那么当你对某个对象进行写操作的时候,问题就出现了,一个对象的改变会影响其他对象,但是这并不是我们想...原创 2017-07-15 16:56:58 · 508 阅读 · 0 评论 -
顺序表和链表优缺点
顺序表:他是在计算机内存中以数组形式保存的线性表。使用一组地址连续的存储单元依次存储数据元素的线性结构。单链表:是一种链式存储的结构。用一组地址任意的存储单元存放线性表中的数据元素。(存储地址空间不需要是连续的)优缺点:空间的开辟 顺序表是需要开辟连续的空间,当需要的空间不够,而有需要插入的时候,就需要再重新开辟空间,将原先的内容拷贝到新的空间,这就开销比较大了。(...原创 2018-04-03 12:23:23 · 2477 阅读 · 0 评论