c++
文章平均质量分 80
呋喃吖
编程使我快乐
展开
-
【C++】类与类之间的 5 种关系
该文章就是简要的总结一下面向对象的:类与类之间的关系,熟悉类与类之间的关系,能够帮助我们更好的设计出合理的类;: A继承B,说明A is B;原创 2022-09-28 09:26:16 · 1602 阅读 · 1 评论 -
简要谈谈C++ 类的成员函数中的 重载 覆盖(重写) 和 隐藏 的区别
重载就是函数重载:作用域:同一个作用域;在类中体现为在一个类中;函数名:相同;参数:个数不同,顺序不同,类型不同;返回值:不关心是否相同;virtual关键字:不关心是否有virtual关键字;覆盖就是派生类的成员函数覆盖了基类的成员函数:作用域:不同作用域;在类中体现为:父子关系的类;函数名:相同;参数:相同;顺序个数类型都必须相同;返回值:相同;virtual:父类必须有virtual关键字;隐藏就是派生类继承基类同名函数将起基类同名函数给屏蔽了: 只要函数名相同就是派生类就原创 2022-04-10 08:37:20 · 709 阅读 · 2 评论 -
简要谈谈C++继承关系和访问限定符的问题
继承关系和访问限定符在C++继承的方式有三种,和访问限定符使用的关键字一样;但是它们的内涵是不一样的;我们经常会搞混继承方式和访问限定符之间的关系,当一个派生类通过这三种方式继承了父类,父类中的成员访问限定符也会起作用;它们之间的联系是什么呢?在派生类中继承基类成员访问方式的变化注意: 一旦我们派生类继承了基类,在派生类中是否可以访问到基类的成员是由继承方式和基类的访问限定符有关系决定的;在派生类中:是否可以访问到基类,可以通过下表查询;但是这派生类中,有9种关系,是否可以访问到基原创 2022-04-06 16:26:16 · 1060 阅读 · 0 评论 -
模拟实现C++中stack和queue
stack 和 queue对于这两个特俗的结构两说,它们不是stl的容器部分,只是容器的适配器;它们的实现,依赖于容器,也就是底层数据类型为容器;由于它们的操作非常简单,并且代码也很容易实现,我就直接书写出看看就好;注意一个:就是我们stack和 queue的成员数据类型也是一个模板。所以说,该成员数据类型必须支持stack 和 queue里面的操作,才可以完成stack的实现;stack的模拟实现#pragma once#include<deque>//栈的第二个模板参原创 2022-03-31 16:18:15 · 394 阅读 · 0 评论 -
模拟实现C++中priority_queue
文章目录priority_queue的介绍构造函数的基础使用priority_queue的模拟实现测试接口代码priority_queue的介绍优先级队列默认使用vector作为其底层存储数据的容器,在vector上又使用了堆算法将vector中元素构造成堆的结构,因此priority_queue就是堆,所有需要用到堆的位置,都可以考虑使用priority_queue。注意:默认情况下priority_queue是大堆。函数接口接口说明priority_queue()/pri原创 2022-03-30 16:27:13 · 1415 阅读 · 1 评论 -
模拟实现C++中list的常用方法
文章目录前言list的结点结构list的正向迭代器设计:list的反向迭代器的设计list模拟实现的代码前言其实STL里的list就是一个带头双向循环链表,实现起来并不是很困难,我们关键要理解,这里list的迭代器实现,同时和反向迭代器复用正向迭代器实现的原理即可;list的结点结构//链表结点 template<class T> struct ListNode { //构造函数: ListNode(const T& date = T()) :_Prev(nu原创 2022-03-23 14:24:04 · 682 阅读 · 0 评论 -
模拟实现C++中vector常用方法
文章目录前言vector的成员数据vector的默认构造函数vector的拷贝构造和赋值运算vector的迭代器vector的[ ] 和 size 和 capacityvector的resize和 reservevector的push_back和pop_backvector的insert和erase(会产生迭代器失效问题)前言要模拟实现前:我们最主要是熟悉使用vector容器先,基本的使用我在好早一篇文章有介绍vector的使用,有需要可以看看c++基础 STL 第一篇: (初识STL 和 vector原创 2022-03-13 17:48:35 · 991 阅读 · 0 评论 -
模拟实现C++中string类的常用方法
文章目录前言1 实现一个简易版的string 类1.1 简易版string 类的成员1.2 简易版string 类的构造函数1.3 简易版string 类的析构函数1.3 简易版string 类的拷贝构造函数1.4 简易版的string 类的拷贝构造函数(新写法)1.5 简易版string 类的赋值运算符重载1.6 简易版string 类的赋值运算符重载(新写法)1.7 简易版的string 类的总代码前言首先,你需要了解和使用过string类,才知道我说的是什么,这里并不实例string类如何使用,因原创 2022-03-11 15:43:59 · 1734 阅读 · 0 评论 -
C/C++中的 extern 和extern“C“关键字的理解和使用(对比两者的异同)
前言文章目录前言一. extern关键字extern 的使用场景1extern 的使用场景2extern的用法总结二. extern "C" 的理解和用法extern"C "使用 在C与C++混合开发中;不知道有人是否在意过C中的extern这个关键字,又或者说是否使用过该关键字,当学C++时候,我发现了在C++中有关键字 extern"C"的用法,和C语言中的 extern还是有区别的,所以今天来总结一些对他们的理解,和使用的方式。一. extern关键字extern关键字的用法很简单,就是简简原创 2021-08-29 23:18:38 · 21940 阅读 · 24 评论 -
C/C++中static的关键字的理解总结(对比在C和C++中的区别和相同)
前言static关键字非常好用,特别是早期时候,对于C语言来说,就是靠static关键字完成封装性滴;常见的大型项目中,static用得非常多,并且static关键字也是面试时候的热门关键字之一。在C++中static关键字由于多了类,所以会在C语言的基础上扩展了一些关于类中成员用static关键字修饰的所以掌握非常重要。一. C语言中的static关键字0) static关键字的名字理解static关键字,有人说他命名得不好?因为static翻译为中文是有安静的意思。但是,对于static关键字原创 2021-08-28 10:40:24 · 2484 阅读 · 8 评论 -
简要的谈谈c++中的命名空间
文章目录需求提出命名空间使用例子参考资料需求提出"想象一个场景,假如,你有一个大型项目,里面的.cpp文件达到50-60个左右,这时候这个项目肯定不是一个人接管的,是多个人写的.cpp文件合在一起,那么,假如张三在自己文件写了一个名为,a的函数,李四也在自己文件写了一个名为a的函数,那么这样就会导致一个问题:就是在编译阶段,发现编译不过去,那如何编译过去,有人说,一旦发现问题,可以吧相同的名字改成不同的名字,比如张三的 a函数还为 ,zhangsan_a;李四的a函数改为,lisi_a,这确实是可以的,原创 2021-08-13 14:24:24 · 158 阅读 · 0 评论 -
c++基础 STL最终篇:(仿函数和STL中常用算法)
文章目录一 仿函数1 基本概念2 仿函数的使用3 谓词二 STL中常用的算法1 遍历算法1) for_each 函数2)transform 函数2 查找算法一 仿函数1 基本概念仿函数本质就是一个类的对象,类里面重载了小括号( ),由于创建对象时候,类似于函数调用,所以我们叫它为仿函数。我们通常也叫仿函数为函数对象。2 仿函数的使用仿函数在使用时,可以像普通函数那样调用, 可以有参数,可以有返回值;仿函数超出普通函数的概念,函数对象可以有自己的状态仿函数可以作为参数传递上诉的使用本质就是原创 2021-07-14 09:19:26 · 411 阅读 · 1 评论 -
c++基础 STL 第五篇 (set / multiset容器 和 map / multimap容器)
文章目录一 set 和 multiset容器的基本概念二 set 容器的基本操作1 构造函数和赋值操作2 set 容器的大小和交换3 set 的插入和删除三 pair 对组创建四 map 和 multimap 容器的基本概念1 map 的构造和赋值操作2 map 容器的大小和交换map 容器的插入和删除一 set 和 multiset容器的基本概念概念:set 容器 为集合;multiset 也是集合;插入数据时候默认按升序排列。说明:set 和 multiset 的操作基本一致,区别在于,se原创 2021-07-13 09:32:36 · 175 阅读 · 3 评论 -
c++基础 STL 第四篇(queue容器和list容器)
文章目录一 queue 容器的基本概念二 queue 容器常用操作三 list 容器的基本概念1 list 的构造函数2 list 的赋值和交换操作3 list 的大小操作4 list 的插入和删除5 list 的反转和排序一 queue 容器的基本概念概念:queue是一种先进先出(First In First Out,FIFO)的数据结构,队列容器允许从一端插入元素,从另一端移除元素。说明:通常队头为移除数据,队尾插入数据;队列没有迭代器的操作,因为无法遍历数据,只能在队头和队尾操作数据;原创 2021-07-12 19:39:36 · 3140 阅读 · 4 评论 -
c++基础 STL 第三篇:(deque容器和stack容器)
文章目录一 deque 的基本概念二 deque 的构造函数三 deque 的赋值操作四 deque 的大小操作五 deque 的插入和删除六 deque 的数据获取七 stack 的基本概念八 stack 的常用接口一 deque 的基本概念deque 就是一个双端数组,可以头端和尾端进行插入删除操作。deque 和 vector 的区别:vector对于头部的插入删除效率低,数据量越大,效率越低deque相对而言,对头部的插入删除速度回比vector快vector访问元素时的速度会比de原创 2021-07-10 21:36:15 · 598 阅读 · 6 评论 -
c++基础 STL 第二篇:(string容器)
一 string 的基本概念string 是 c++ 的字符串,本质是一个类;char* 是一个指针,而 string 是类, 类内封装 char*,管理 char*,使用 string 不用担心字符越界问题,因为这都是类内管理好的了。二 string 的构造函数在 string 类内有这几种构造函数,构造函数的目的就是给对象初始化构造函数的原型功能string( )初始化空串string(const char* str)将字符串 str 初始化 stri原创 2021-07-10 09:47:36 · 153 阅读 · 0 评论 -
c++基础 STL 第一篇: (初识STL 和 vector 容器)
文章目录一 初始STL二 STL的六大组件三 STL中的容器,算法,迭代器四 vector容器的基本使用1 基本使用方式2 vector 的构造函数3vector 的赋值操作4 vector 容量和大小操作5 vector 的插入和删除6 vector 的数据存取操作7 vector 的swap函数收缩空间8 预留空间reserve函数一 初始STLSTL 全称 Standard Template Library (标准模板库)的意思,是c++给我们提供的一个标准模板库,让我们去使用它。有标准模板库的原原创 2021-07-08 21:37:01 · 340 阅读 · 3 评论 -
c++基础 STL 第 0 篇:(模板)
文章目录一 泛型编程的概念二 模板1 模板概念2 模板分类三 函数模板1 函数模板的基本语法2 函数模板的注意事项3 普通函数与函数模板的区别4 普通函数与函数模板重载调用规则5 函数模板的局限性四 类模板1 类模板的基本语法2 类模板与函数模板的区别3 类模板的成员函数的创建时机4 类模板对象做函数参数的传参方式五 类模板与继承之间的联系六 类模板的成员函数类外实现七 类模板与友元之间的联系一 泛型编程的概念泛型编程,英文为 generic programming; generic 有通用的意思。那原创 2021-07-07 14:02:11 · 362 阅读 · 8 评论 -
c++基础 面向对象 :第九篇(多态)
多态多态就是字面意思有多种形态的意思。那在c++中多态有两类:静态多态:如函数重载,运算符重载都属于静态多态,同一个函数名有多种形态。动态多态:子类(派生类)和虚函数实现在运行时候多态。我们平时所说的多态就是动态多态。静态多态和动态多态的区别:(从地址的角度去理解)静态多态:在编译阶段时候就绑定了函数的地址,我们称这种为地址早绑定动态多态:在运行阶段时候绑定函数地址,我们称这种为地址晚绑定。怎么理解 虚函数,地址早绑定和地址晚绑定啊?来看看下面的代码:先构建一个场景:class原创 2021-06-27 10:37:33 · 238 阅读 · 2 评论 -
c++基础 面向对象:第八篇(继承)
继承的基本概念在之前的学习中,我们了解了类中的属性和行为的关系,这次我们谈一谈类与类之间的关系。在对于一些类中,其实有一些共同的特性的:如下图,动物类分为猫类,狗类,猫类又可以分为好多种品种的猫,狗又可以分为很多品种的狗,但归结起来他们都是动物类,这说明类与类之间存在着一种继承的关系,下面的小类,继承了上面的大类的特性。着说明小类有自己的特性的同时,还拥有上面大类的共性。在C++中提供了一种继承的技术,让我们能减少重复代码的书写。继承的好处如何减少重复代码量呢?举个猫类的例子:假如我们设计一原创 2021-06-25 15:24:04 · 482 阅读 · 2 评论 -
c++基础 面向对象:第七篇(运算符重载)
运算符重载运算符重载就是给运算符一些重新定义其使用方式,让我们原本只能内置类型使用的符号可以让自定义类型去使用该符号。比如+号,在内置类型中就是数据加减的意思,但是在stirng类中的意思确实字符串的拼接,string中的+就是+号运算符重载的结果。...原创 2021-06-24 20:22:13 · 296 阅读 · 2 评论 -
c++基础 面向对象:第六篇(友元)
友元在c++中,友元就相当于类的好朋友,成员函数的好朋友,全局函数的好朋友,好朋友可以做什么呢?好朋友可以知道你的一些别人不可以知道的小秘密。在程序里,有些私有成员属性也想让类外特殊的一些函数或者类进行访问,就需要用到友元的技术。友元的目的就是让一个函数或者类 访问另一个类中私有成员友元的三种实现方式友元全局函数友元成员函数友元类全局函数做友元全局函数做友元可以访问类中的私有成员class Building{ //告诉编译器 goodGay全局函数 是 Building类的好朋友,可原创 2021-06-21 20:19:02 · 167 阅读 · 3 评论 -
c++基础 面向对象:第五篇(构造,析构,拷贝函数)
一 构造函数在c++中,类内的成员变量是通过构造函数去初始化的。构造函数:在实例化一个对象时,给对象的成员属性初始化。语法: 类名(){}1.与类名同名,没有返回值。2.创建对象时候自动调用构造函数3.假如自己不写构造函数,编译器会给你写,并且时自动调用的。4.构造函数可以有参数,所以也可以函数重载。1. 构造函数的分类及其调用分类:默认(无参)构造:没有形参的构造函数。假如自己不编写,编译器自动调用的函数。无参不代表没有成员变量参数啊,只是代表没有形参。有参构造:有原创 2021-06-21 15:39:23 · 674 阅读 · 4 评论 -
c++基础 面向对象:第四篇 (类和对象-封装)
类和对象c++面向对象的三大特性:封装,继承,多态。在c++中,认为万物皆对象,对象有属性和行为。在c++中,用关键字 class 去封装对象。语法:class 类名{ //1.属性 //2.行为}属性我们又叫成员变量,成员属性。行为我们又叫成员函数,成员方法。叫法不同但是都是一个意思。创建一个对象又叫实例化对象。由于 class定义出来的对象并不是一个对象,是千千万万个相同属性和行为方法的对象,所以我们抽象出来这个类名,用类名去创建一个具体的对象。看一个例子感受以下类原创 2021-06-20 14:05:10 · 262 阅读 · 3 评论 -
c++基础 面向对象:第三篇 (默认参数,占位参数,重载及其重载原理)
文章目录1. 函数的默认参数2.函数的占位参数3. 函数重载1. 函数的默认参数在c++中,函数的形参是可以有默认参数的。注意:如果自己传入数据,就用自己传入的数据,否则用默认值。假如某个参数的位置已经有了默认参数,那么该位置的后面都必须有默认参数声明和实现函数中默认参数只能在一个地方有(声明有默认参数,或者实现有默认参数),不能同时都有默认参数。 eg : 如果自己传入数据,就用自己传入的数据,否则用默认值。void fun(int a = 10){ }int main ()原创 2021-06-19 20:51:10 · 343 阅读 · 0 评论 -
c++基础 面向对象:第二篇(引用)
文章目录1. 引用2. 引用做函数的形参3. 引用做函数的返回值4. 引用的本质5. 常量引用1. 引用引用就是给变量起别名。语法: 数据类型& 别名 = 变量名;这里别名等价于变量名;int a = 10;int &b = a;// b 等价于 a;注意:引用必须初始化,不初始化的话你都不知道给谁起别名了。引用一旦初始化就不可以初始化别的变量了。eg:引用必须初始化int &b ; //错误,没有初始化int a;int &b = a;原创 2021-06-19 17:24:07 · 192 阅读 · 0 评论 -
c++基础 面向对象:第一篇(内存分区模型)
一 内存分区模型c++在执行的时候,将内存分为四个区域:1.代码区:存放的是cup执行的机器指令,也就是一些二级制代码,由操作系统管理。2. 全局区:存放的是全局变量,静态变量(修饰全局和局部)。全局区还包含常量区字符串常量 和 const修饰的全局变量 内存放在此。3. 栈区: 存放函数形参,还有局部变量。4. 堆区:程序员手动开辟的空间。1. 程序运行前:程序运行前的意思是,代码编译之后,生成了可执行文件exe。程序运行前,有代码区和全局区。代码区特点:1.该区的内存是共享,目的对于原创 2021-06-18 23:00:36 · 188 阅读 · 4 评论