
C++编程
文章平均质量分 70
BigCowPeking
追求卓越,永不放弃
展开
-
C++特性:隐藏和覆盖
C++类中覆盖与隐藏一直是一个容易理解出错的地方,接下来我就详细讲解一下区别在何处覆盖指的是子类覆盖父类函数(被覆盖),特征是:1.分别位于子类和父类中2.函数名字与参数都相同3.父类的函数是虚函数(virtual)隐藏指的是子类隐藏了父类的函数(还存在),具有以下特征:子类的函数与父类的名称相同,但是参数不同,父类函数被隐藏子类函数与父类函数的名称相同,参数也相同,但是父类函数没有virtual...转载 2018-04-09 21:24:46 · 537 阅读 · 0 评论 -
c++:联合和枚举类型区别
Motivation我这人有一个最大的毛病,学什么东西都总喜欢学个皮毛。记得大一那会儿我们学C,教材上有几个内容不考,枚举和共用体正是其中之一,我就想当然地觉得没用,也没看。直到前几天在看深度学习框架caffe的时候才回过神来,原来任何东西都是有用的啊!这篇文章就希望能够对枚举类型enum和共用体union做一个基本的介绍。一、联合(union)1.1 union是什么union,又称联合体或是共...转载 2018-06-21 22:01:42 · 931 阅读 · 0 评论 -
C++: 类型转换详解const_cast
一. 函数描述:const_cast ( expression )主要是用来去掉const属性,当然也可以加上const属性。主要是用前者,后者很少用。去掉const属性:const_case (&num),常用,因为不能把一个const变量直接赋给一个非const变量,必须要转换。加上const属性:const int* k = const_case(j),一般很少用,因为可以把一个非c...转载 2018-06-07 21:24:47 · 486 阅读 · 0 评论 -
C++:堆排序算法详解
图解排序算法(三)之堆排序预备知识堆排序 堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序。首先简单了解下堆结构。堆 堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆;或者每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆。如下图:同时,我们对堆中的结点按层进行编号...转载 2018-06-07 21:28:57 · 5630 阅读 · 2 评论 -
C++:变量命名
1:变量命名int aiTemp[256];int *piTemp[256];2: 函数命名规则动词+名词;startFaceDetection();3: 类名的命名规则class CFaceDetection{ }CFaceDetection iFaceDetection;4:结构体typedef struct tagFaceDetect{int iNum;char cPath[256];}Fa...原创 2018-06-07 21:44:44 · 462 阅读 · 0 评论 -
C++: ofstream和ifstream的读写文件方式
ofstream和ifstream的使用的方法:int main(){ int iTestData[5] = { 1, 2, 3, 4, 5 }; ofstream oWriteFile("test.txt", ios::out); if (!oWriteFile) { cout << "Cannot open file.\n"; return 1; } for ...原创 2018-06-23 14:27:39 · 638 阅读 · 0 评论 -
C++之const:const用法总结
C++中的const关键字的用法非常灵活,而使用const将大大改善程序的健壮性,本人根据各方面查到的资料进行总结如下,期望对朋友们有所帮助。Const 是C++中常用的类型修饰符,常类型是指使用类型修饰符const说明的类型,常类型的变量或对象的值是不能被更新的。 一、Const作用 如下表所示:No.作用说明参考代码1可以定义const常量 const int Max = 100; ...转载 2018-06-29 20:35:43 · 625 阅读 · 0 评论 -
C++:const的四种用法
一、用const修饰函数参数1、修饰指针,可以防止指针被修改void test(const ClassA* a){ ClassA** b = &a; //编译错误,不能对const指针取地址 ClassA* c = a; //编译错误,不能将const指针转普通指针 (*b) = new ClassA();}void test2(ClassA* a){ ...转载 2018-06-29 20:42:41 · 1026 阅读 · 2 评论 -
c++之设计模式:策略模式
模式定义 策略模式定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。模式结构 举例: 游泳池中有不同种类的鸭子,有绿头鸭,红头鸭,橡皮鸭,木头鸭等。不同鸭子的特征或行为不同。绿头鸭(MallardDuck)可以叫声是“quack”,会飞;橡皮鸭叫声是“queak”,不会飞;木头鸭不会叫,也不会飞。利用面向对象原理来设计来泳池...原创 2018-06-29 21:06:16 · 353 阅读 · 0 评论 -
C++: DS的一些特殊用法
1:所谓 #include 的意思呢,就是把另一个文件里的东西复制到这里来,无论你的文件后缀是 h 还是 cpp 都是一样的;2: .h 文件并没有定义,都是一些声明,声明可以重复多次,而定义不行;3:#include *.h #include *.cpp本质上就是把那个文件里的代码复制到这个文件里!4:类的前向声明:class Tracker *piTracker;只是声明...原创 2018-09-11 22:43:29 · 819 阅读 · 0 评论 -
c++ :override的用法
override关键字作用: 如果派生类在虚函数声明时使用了override描述符,那么该函数必须重载其基类中的同名函数,否则代码将无法通过编译。 举例子说明struct Base { virtual void Turing() = 0; virtual void Dijkstra() = 0; virtual void VNeumann(int g) = 0...转载 2018-09-05 22:05:05 · 11409 阅读 · 3 评论 -
c++ : 静态成员函数和静态成员变量
C++类中的静态成员变量和静态成员函数的作用数据成员可以分为静态变量、非静态变量两种。静态成员:静态类中的成员加入static 修饰符,即是静态成员,可以使用类名+静态成员名访问此静态成员,因为静态成员存在于内存,非静态成员需要实例化才会分配内存,所以静态成员不能访问非静态成员,因为静态成员存在于内存,所以非静态成员可以直接访问类中的静态成员。 非静态成员:所以没有加static的成员都...转载 2018-09-05 22:08:15 · 419 阅读 · 0 评论 -
C++: 共享指针shared_ptr使用
共享指针 (shared_ptr) 是现在的 Boost 库中提供的,并且应该是将来 C++1x 的标准库中提供的一个模板类。在此之前,ISO/IEC 14882:2003 标准库 <memory> 中的“自动指针 (auto_ptr)”也有类似的功能。显然 shared_ptr 要比 auto_ptr 从功能上来说应该强大一些。这篇文章主要介绍 shared_ptr 的最基本用法和...转载 2018-09-16 08:06:31 · 7474 阅读 · 0 评论 -
C++: 类的前向声明
一、使用场景假设有两个类A和B,类A要将类B的对象(或者指正)作为自己的成员使用,并且类B将类A的对象(或者指针)作为自己可以访问的数据,那么这个时候要在a.h中include b.h,同时在b.h 中要include a.h,但是相互包含是不可以的,这个时候就要用到类的前向声明了。类的前向声明是利用了编译器的特性,编译器在编译的过程中只需要知道各个元素的名称和相应的大小就可以。而在c+...原创 2018-09-10 21:48:39 · 917 阅读 · 0 评论 -
C++:数组和指针占用的字节数sizeof
int main(){ int a[6] = { 1, 1, 2, 3, 5 }; int *p = a; printf("size =%d\n", sizeof(a),*a); printf("size =%d\n", sizeof(*(&a+1))); printf("size =%d\n", sizeof(*(&a))); printf("size =%d\...原创 2018-06-14 07:41:48 · 1679 阅读 · 0 评论 -
C++:单例模式Singleton
Singleton单例模式Singleton 是对全局变量的取代策略作用:保证一个类只能有一个实例,并提供一个全局唯一的访问点。仅有一个实例:通过类的静态成员变量来体现。提供访问它的全局访问点:访问静态成员变量的静态成员函数来体现。《设计模式》一书中给出了一种很不错的实现,定义一个单例类,使用类的私有静态指针变量指向类的唯一实例,并用一个公有的静态方法获取该实例。单例模式通过类本身来管理其唯一实例...转载 2018-06-05 21:45:55 · 378 阅读 · 0 评论 -
C++: 虚函数和纯虚函数
首先:强调一个概念定义一个函数为虚函数,不代表函数为不被实现的函数。定义他为虚函数是为了允许用基类的指针来调用子类的这个函数。定义一个函数为纯虚函数,才代表函数没有被实现。定义纯虚函数是为了实现一个接口,起到一个规范的作用,规范继承这个类的程序员必须实现这个函数。1、简介假设我们有下面的类层次:[cpp] view plain copyclass A { public: virtua...转载 2018-06-04 22:11:56 · 157 阅读 · 0 评论 -
C++:Private和Protected的成员变量的区别
1:在public的共有继承中protected的变量在继承的子类中继承为protected的,子类的成员函数可以直接访问,在类外函数调用时,可以通过子类的对象可以访问;protected的变量在继承的子类中继承为protected的,子类的成员函数可以直接访问,在类外函数调用时,不可以通过子类的对象可以访问;2:实例隐藏是指在继承过程中子类和父类存在同名函数的一种情况,他和重写很相似,但是是完全...原创 2018-04-16 18:40:34 · 2419 阅读 · 0 评论 -
C++:虚函数和虚继承
1:虚析构函数主要是为了解决释放父类的指针,同时释放子类的指针,防止内存的泄露;例如 Father p = new Son();delete P;P= NULL;如果父类没有析构函数则会造成内存泄露;2:虚继承主要解决是菱形继承中的问题,主要是为了子类访问父类中的成员变量的问题!...原创 2018-04-16 21:10:08 · 181 阅读 · 0 评论 -
C++:const和define的区别
1:const 是常量数据类型,存处在程序的数据段,define只是进行文本的替换,存在与程序的代码区;2:内敛函数,不需要寻址的过程,函数直接展开,所以不会跳跃,比较快,在编译的时候复制代码;3:struct的默认继承是public的,class的默认继承是private;4:typedef主要用来定义新的数据类型,define主要用来定义变量;我们平常所求的变量地址这里是逻辑关系,真实的物理地...原创 2018-04-22 17:26:15 · 1580 阅读 · 0 评论 -
C++: 深拷贝和浅拷贝
对于普通类型的对象来说,它们之间的复制是很简单的,例如:int a=88;int b=a; 而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量。下面看一个类对象拷贝的简单例子。 #include <iostream>using namespace std;class CExample {private: int a;public: CExample(i...转载 2018-04-12 21:55:35 · 260 阅读 · 0 评论 -
C++:基本知识点
1:指针和引用指针:指针是一个变量,只不过这个变量存储的是一个地址,指向内存的一个存储单元,即指针是一个实体;而引用跟原来的变量实质上是同一个东西,只不过是原变量的一个别名而已。2:内存泄露和内存溢出泄漏就是内存申请后,用完没有释放,造成可用内存越来越少。溢出指用户实际的数据长度超过了申请的内存空间大小,导致覆盖了其他正常数据,容易造成程序异常,严重的,攻击者可以以此获取程序控制权3:纯虚函数和虚...原创 2018-04-25 22:20:03 · 153 阅读 · 0 评论 -
C++:面试题基础知识点
1.new、delete、malloc、free关系delete会调用对象的析构函数,和new对应free只会释放内存,new调用构造函数。malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。它们都可用于申请动态内存和释放内存。对于非内部数据类型的对象而言,光用maloc/free无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动...转载 2018-04-26 21:38:29 · 939 阅读 · 0 评论 -
C++:面试题知识总结
面试题1:变量的声明和定义有什么区别为变量分配地址和存储空间的称为定义,不分配地址的称为声明。一个变量可以在多个地方声明,但只能在一个地方定义。加入extern修饰的是变量的声明,说明此变量将在文件以外或在文件后面部分定义。说明:很多时候一个变量,只是声明,不分配内存空间,知道具体使用时才初始化,分配内存空间,如外部变量。面试题2:sizeof和strlen的区别sizeof和strlen有以下区...转载 2018-04-26 22:00:15 · 190 阅读 · 0 评论 -
C++:New和Delete的用法
//C++里 数组new 和delete问题 //对于数组new的不同方式 和不同的释放方法 //---------------------------------------------------------------- // 创建字符指针数组 char **parr = new char*[100]; //注意这里是**parr // 释放各个字符...原创 2018-04-29 15:29:10 · 466 阅读 · 0 评论 -
C++: 面试基本点
1:请说出const与#define 相比,有何优点?答案:Const作用:定义常量、修饰函数参数、修饰函数返回值三个作用。被Const修饰的东西都受到强制保护,可以预防意外的变动,能提高程序的健壮性。1) const 常量有数据类型,而宏常量没有数据类型。编译器可以对前者进行类型安全检查。而对后者只进行字符替换,没有类型安全检查,并且在字符替换可能会产生意料不到的错误。2) 有些集成化的调试工具...原创 2018-04-29 15:59:39 · 276 阅读 · 1 评论 -
C++:简单工厂模式
所谓简单工厂模式,是一种实例化对象的方式,只要输入需要实例化对象的名字,就可以通过工厂对象的相应工厂函数来制造你需要的对象。简单工厂模式的核心是,对于一个父类的多个继承子类,工厂对象的工厂函数根据用户输入,自动new出一个子类对象并返回其父类的指针,这样利用父类的指针执行父类的虚函数,就可以动态绑定子类的重写函数,从而实现多态。对于一个只拥有加减乘除运算的简单计算器,我们设计一个Operation...转载 2018-05-16 17:05:28 · 231 阅读 · 0 评论 -
C++:工厂模式
工厂模式工厂模式基本与简单工厂模式差不多,上面也说了,每次添加一个产品子类都必须在工厂类中添加一个判断分支,这样违背了开放-封闭原则,因此,工厂模式就是为了解决这个问题而产生的。既然每次都要判断,那我就把这些判断都生成一个工厂子类,这样,每次添加产品子类的时候,只需再添加一个工厂子类就可以了。这样就完美的遵循了开放-封闭原则。但这其实也有问题,如果产品数量足够多,要维护的量就会增加,好在一般工厂子...转载 2018-05-16 17:10:45 · 275 阅读 · 0 评论 -
C++:抽象工厂模式
抽象工厂模式抽象工厂模式就变得比工厂模式更为复杂,就像上面提到的缺点一样,工厂模式和简单工厂模式要求产品子类必须要是同一类型的,拥有共同的方法,这就限制了产品子类的扩展。于是为了更加方便的扩展,抽象工厂模式就将同一类的产品子类归为一类,让他们继承同一个抽象子类,我们可以把他们一起视作一组,然后好几组产品构成一族。此时,客户端要使用时必须知道是哪一个工厂并且是哪一组的产品抽象类。每一个工厂子类负责产...转载 2018-05-16 17:12:24 · 921 阅读 · 0 评论 -
C++:重载和重写
重载(Overloading) 方法重载是让类以统一的方式处理不同类型数据的一种手段。多个同名函数同时存在,具有不同的参数个数/类型。重载Overloading是一个类中多态性的一种表现。 Java的方法重载,就是在类中可以创建多个方法,它们具有相同的名字,但具有不同的参数和不同的定义。调用方法时通过传递给它们的不同参数个数和参数类型来决定具体使用哪个方法, 这就是多态性。 重载的时候,方法名要一...转载 2018-06-04 22:04:46 · 2132 阅读 · 0 评论 -
C++ :static和extern的用法总结
1. static关键字1.1 函数和变量声明(C/C++) static全局变量: 当声明一个static全局变量,则表示静态全局变量,和其他变量一样,存放在.data(初始化了)或者.bss(未初始化)内,但只在定义它的源文件中有效,其余文件无法访问它。 static局部变量: 具有以下特点: 函数中声明一个static局部变量,不分配在堆或者栈上,也分配...原创 2018-09-18 21:43:37 · 3127 阅读 · 0 评论