![](https://img-blog.csdnimg.cn/20190927151124774.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
C++面向对象编程
文章平均质量分 83
c++中类的封装,继承,重载等一系列知识的自我认识
ice_玖闻于世丶
寻求一份C/C++/iOS 研发offer
展开
-
模板特化以及模板分离操作
一、模板特化。(一). 函数模板的特化:函数模板的特化步骤:必须要先有一个基础的函数模板关键字template后面接一对空的尖括号<>函数名后跟一对尖括号,尖括号中指定需要特化的类型函数形参表: 必须要和模板函数的基础参数类型完全相同,如果不同编译器可能会报错。#include<iostream>#include<sring.h>using namespace std;template<class T>// 函数模板bool IsE原创 2020-08-04 00:49:21 · 247 阅读 · 0 评论 -
【转】单例模式(懒汉模式与饿汉模式)
本文链接:https://blog.csdn.net/king457757706/article/details/51887611最近写代码因为疏忽单例的判断,导致程序快速切换多次启动时出现了bug ,借这个机会梳理一下几种单例模式的构造方式。单例模式存在的意义是保证一个类仅有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享。解决方法1(懒汉式)一种实现方法是定义一个单例类,使用类的私有静态指针变量指向类的唯一实例,并用一个公有的静态方法获取该实例。单例模式通过类本身来管理其唯一实例转载 2020-07-28 11:47:46 · 157 阅读 · 0 评论 -
C++中的几个特殊类(在堆上,栈上创建对象)
1. 设计一个类只能在堆上创建对象。实现方式:(1)将类的构造函数,拷贝构造函数设置为私有,防止别人调用,防止别人调用拷贝在栈上生成对象。(2)提供静态成员函数,在函数中完成堆对象的创建。class Base{private: Base() {} Base(const Base&) { } Base(const Base& a) = delete;//C++11的做法;public: static Base* fun() { return new Ba原创 2020-07-25 00:23:25 · 538 阅读 · 0 评论 -
C++—浅谈智能指针
一、智能指针概念:(1)内存泄露及其危害:内存泄漏:内存泄漏指因为疏忽或错误造成程序未能释放已经不再使用的内存的情况。内存泄漏并不是指内存在物理上的消失,而是应用程序分配某段内存后,因为设计错误,失去了对该段内存的控制,因而造成了内存的浪费。危害:长期运行的程序出现内存泄漏,影响很大,如操作系统、后台服务等等,出现内存泄漏会导致响应越来越慢,最终卡死。检测内存泄露的工具:①windows下检测:VLD;②LInux下检测:(2)智能指针原理:智能指针:它具有指针的行为,指针可以解引用原创 2020-07-22 01:26:55 · 155 阅读 · 0 评论 -
C++中的异常捕获
一、概念:1. C语言中错误处理机制:(1)终止程序,assert。通过assert终止错误,用户无法查看错误信息。(2)返回错误代码,系统会通过醋无信心返回错误代码,程序员需要进行查看才能知道错误信息。2. C++中的异常概念:异常是一种错误处理方式,...原创 2020-07-21 11:12:54 · 4060 阅读 · 0 评论 -
C++11中线程库的使用
线程库:1.线程库介绍:在C++11之前,涉及到多线程问题,都是和平台相关的,比如windows和linux下各有自己的接口,这使得代码的可移植性比较差。C++11中最重要的特性就是对线程进行支持了,使得C++在并行编程时不需要依赖第三方库,而且在原子操作中还引入了原子类的概念。要使用标准库中的线程,必须包含< thread >头文件。2. 线程库函数的使用: thread() 构造一个线程对象,没有关联任何线程函数,即没有启动任何线程 thread(fn,args1,原创 2020-07-19 00:05:06 · 455 阅读 · 0 评论 -
C++11中的初始化列表,右值引入,lambda表达式等
一、C++11的介绍:相较于C++98/03,C++11则带来了数量可观的变化,其中包含了约140个新特性,以及对C++03标准中约600个缺陷的修正,这使得C++11更像是从C++98/03中孕育出的一种新语言。相比较而言,C++11能更好地用于系统开发和库开发、语法更加泛华和简单化、更加稳定和安全,不仅功能更强大,而且能提升程序员的开发效率。二、C++11中的主要知识概念:(一)、初始化列表:概念:...原创 2020-07-19 00:04:05 · 619 阅读 · 0 评论 -
STL关联式容器—set的使用
一、set介绍:原创 2020-07-17 18:01:19 · 555 阅读 · 0 评论 -
STL关联式容器—map的使用
一、map介绍:(一)map简介:map是关联容器,它按照特定的次序(按照key来比较)存储由键值key和值value组合而成的元素。在map中,键值key通常用于排序和惟一地标识元素,而值value中存储与此键值key关联的内容。键值key和值value的类型可能不同,并且在map的内部,key与value通过成员类型value_type绑定在一起,为其取别名称为pair:typedef pair value_type;在内部,map中的元素总是按照键值key进行比较排序的。map中通过键值原创 2020-07-14 23:38:20 · 148 阅读 · 0 评论 -
数据结构—红黑树(BRTree树)的认识
一、红黑树的概念:红黑树:是一种二叉搜索树,但在每个结点上增加一个存储位表示结点的颜色,可以是Red或Black。 通过对任何一条从根到叶子的路径上各个结点着色方式的限制,红黑树确保没有一条路径会比其他路径长出两倍,因而是接近平衡的。红黑树的性质:(一头一脚黑,黑同红不同)(1)每个结点不是红色就是黑色(2)根节点是黑色的(3)如果一个节点是红色的,则它的两个孩子结点是黑色的(4)对于每个结点,从该结点到其所有后代叶结点的简单路径上,均 包含相同数目的黑色结点(5) 每个叶子结点都是黑色的(原创 2020-07-06 00:16:30 · 386 阅读 · 0 评论 -
AVL树平衡调整与应用解析
一、 AVL树的概念。二、AVL树的操作。三、AVL树的模拟实现。四、AVL树的应用及解析。原创 2020-06-25 00:53:09 · 613 阅读 · 0 评论 -
搜索二叉树的实现与应用
一、概念:二、二叉搜索树的操作:三、二叉搜索树的模拟实现:原创 2020-06-23 01:19:30 · 557 阅读 · 0 评论 -
C++中的重载,覆盖,和重定义(同名隐藏)
一、基础概念重载:函数在同一作用域中,且函数名字相同,参数列表不同。注意:只有返回值不同的函数不能构成重载。覆盖:两个函数分别在基类和子类里,基类中的函数必须是虚函数,子类必须重写父类的方法。注意:基类和子类的两个函数都是虚函数。虽然子类重写父类的虚函数时有时候不加virtual,但子类的函数也是虚函数。重定义:两个函数分别在子类和父类,两函数的函数名相同,在继承中,子类会隐藏父类的方法。注意:(1)如果派生类的函数与基类的函数同名,参数不相同,此时,不论有无virtual关键字,基类的函数原创 2020-06-16 23:45:02 · 384 阅读 · 0 评论 -
C++中多态理解
一、多态的概念通俗的说,就是使用相同的接口实现不同的功能。1.形成多态的条件:多态是在不同继承关系的类对象,去调用同一函数,产生了不同的行为。形成的条件:(1)子类要继承父类。(2)子类要重写父类的虚函数。(3)要用父类的指针或应用调用虚函数。...原创 2020-06-16 17:15:51 · 291 阅读 · 0 评论 -
C++中的继承与虚拟菱形继承
一.继承的概念。继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。以前我们接触的复用都是函数复用,继承是类设计层次的复用。例如:class person{public: void print() { cout << _age << endl; }private: int _age原创 2020-05-31 20:40:58 · 157 阅读 · 0 评论 -
C++的IO流
一.C语言中的IO流:C语言的输入输出:C语言中我们用到的最频繁的输入输出方式就是scanf ()(输入)与printf()(输出打印)。scanf(): 从标准输入设备(键盘)读取数据,并将值存放在变量中。printf(): 将指定的文字/字符串输出到标准输出设备(屏幕)。注意宽度输出和精度输出控制。C语言借助了相应的缓冲区来进行输入与输出。二.C++中的IO流:C++的流类库:C++系统实现了一个庞大的类库,其中ios为基类,其他类都是直接或间接派生自ios类:在C++的流类库原创 2020-05-26 01:26:30 · 240 阅读 · 0 评论 -
STL—stack、queue以及priority_queue(优先级队列)的模拟实现。
一 .stack的模拟实现。(一)stack介绍。stack是一种容器适配器,专门用在具有后进先出操作的上下文环境中,只能从容器的一端进行元素的插入与提取操作。stack是作为容器适配器被实现的,容器适配器即是对特定类封装作为其底层的容器,并提供一组特定的成员函数来访问其元素,将特定类作为其底层的,元素特定容器的尾部(即栈顶)被压入和弹出。stack底层结构需要满足的接口:empty:判空操作back:获取尾部元素操作push_back:尾部插入元素操作pop_back:尾部删除元素操作原创 2020-05-24 00:50:32 · 182 阅读 · 0 评论 -
STL—双端队列deque的使用
一。双端队列的介绍。双端队列是动态大小的序列式容器,其可以像两端进行伸缩。特定的库可以以不同的方式实现deque,但通常都是一种动态数组。不论在何种情况下,它都允许通过随机访问迭代器直接访问单个元素,可以根据需要动态的伸缩。因此,deque提供了一些与vector相似的功能,但deque在头部和尾部进行数据插入和删除操作更加高效。与vector不同的是,deque不能保证所有的元素存储在连续的空间中,在deque中通过指针加偏移量方式访问元素可能会导致非法的操作。vector与list提供了相似的原创 2020-05-18 15:00:43 · 205 阅读 · 0 评论 -
STL—string容器使用及模拟实现
一. string介绍。C语言中,字符串是以’\0’结尾的一些字符的集合,为了操作方便,C标准库中提供了一些str系列的库函数,但是这些库函数与字符串是分离开的,不太符合OOP(面向对象的程序设计)的思想,而且底层空间需要用户自己管理,稍不留神可能还会发生越界访问。string类:string是表示字符串的字符串类。该类的接口与常规容器的接口基本相同,再添加了一些专门用来操作string的常规操作。string在底层实际是:basic_string模板类的别名,typedef basic_s原创 2020-05-12 17:38:01 · 143 阅读 · 0 评论 -
STL容器—vector的使用及模拟实现
一.vector的介绍。vector是表示可变大小数组的序列容器。就像数组一样,vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问,和数组一样高效。但是又不像数组,它的大小是可以动态改变的,而且它的大小会被容器自动处理。本质讲,vector使用动态分配数组来存储它的元素。当新元素插入时候,这个数组需要被重新分配大小为了增加存储空间。其做法是,分...原创 2020-05-06 16:43:26 · 148 阅读 · 0 评论 -
STL—List容器
一.List介绍。list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向其前一个元素和后一个元素。list与forward_list非常相似:最主要的不同在于forward_list是单链表,只能朝前迭代,已让其更简单高效。与其他的序列式容器相比(arra...原创 2020-05-06 00:11:51 · 119 阅读 · 0 评论 -
文件快速搜索工具
一.项目简介:Linux操作系统中提供了find指令查找指定文件,为了实现在Windows操作系统中实现文件的快搜搜索,利用所学知识实现文件搜索神器,与软件everything工具具有一定的相同功能,即:快速通过汉字,首字母,拼音实现文件的快速搜索。二.项目需求及环境(一)需求通过首字母,汉字,拼音实现文件快速搜索。实现搜索关键字的高亮处理。(二)开发环境编译器 : VS2...原创 2020-04-20 17:39:50 · 532 阅读 · 0 评论 -
泛化编程和模板的使用
在学习的过程中,我们在写代码的时候会使用一些形式相同,参数相同,但参数类型和返回值类型不同的一些函数。当初我们学过函数重载,但函数重载存在以下一些不好的地方。-例如:重载的函数仅仅只是类型不同,代码的复用率比较低,只要有新类型出现时,就需要增加对应的函数。代码的可维护性比较低,一个出错可能所有的重载均出错。泛型编程:编写与类型无关的通用代码,是代码复用的一种手段。模板是泛型编程的...原创 2020-04-13 17:53:23 · 421 阅读 · 0 评论 -
C++中的动态内存new和delete
一.C/C++中内存的分布。该图说明了C/C++中动态内存开辟是在堆上进行的。C语言中动态内存开辟请参考博客地址:原创 2020-04-10 19:10:39 · 124 阅读 · 0 评论 -
C++类与对象—默认成员函数
一、默认成员函数。如图所示:当我们自己定义的类中没有下列函数的时候,编译器调用系统自动生成的下列函数,因此,了解这些函数就很重要。二、构造函数。定义:构造函数是一个特殊的成员函数,名字与类名相同,创建类类型对象时由编译器自动调用,保证每个数据成员都有一个合适的初始值,并且在对象的生命周期内只调用一次。构造函数是特殊的成员函数,需要注意的是,构造函数的虽然名称叫构造,但是需要...原创 2019-11-16 01:13:20 · 159 阅读 · 0 评论 -
C++—类与对象初始
1、初步认识。(1)C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。(2)C++是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完成。2、类的引入与定义。(1)在C语言中,结构体只能定义变量,而在C++中,结构体不仅能定义变量,还能定义函数。#include<iostream>using namespace s...原创 2019-11-12 16:08:37 · 108 阅读 · 0 评论 -
C++基础入门必知
#1、C++关键字。C++中关键字很多,例如:class、auto、bool、break、static等,还包括C语言中的一些关键字,这些关键字在C++的学习中非常重要,相信在以后的学习中你会慢慢了解的更透彻。#2、命名空间。(1)在C/C++中,变量、函数和都是大量存在的,这些变量、函数和类的名称将都存在于全局作用域中,可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化,以...原创 2019-11-05 00:51:09 · 298 阅读 · 0 评论