
C++(线上)
文章平均质量分 82
C++线上知识点
何小柒~
生命不是代码,没有最优解;存在本身,就是最浪漫的bug。
展开
-
C++项目:游客黑名单系统
实现语言:c/c++服务模型:client – server第三方库:libevent,json,mysql客户端模型:分布式协同处理+多线程服务器模型:半同步半异步+MVC游客黑名单项目用于记录各个景区内出现不文明行为的游客信息。当游客需要进入景区时候需要进行验证是否存在于黑名单之上,如果已被列入黑名单,景区有权拒绝该游客进入。项目客户端主要负责黑名单信息的增删改查操作,获取到操作指令之后将指令发送给服务器。原创 2023-09-26 16:24:37 · 134 阅读 · 0 评论 -
C++ 15:虚表,虚函数,多态,指针
virtual函数系动态绑定,而缺省参数值确是静态绑定公有继承+虚函数+引用/指针 产生了动态联编,调用的是子类的fn函数,有同名覆盖,但是函数重写参数并没有进行重写,如果没有在主函数进行传递参数,则参数不变。代码示例public :} };Child c;return 0;}运行结果多重继承也会产生动态联编;非虚函数不需要重新定义虚函数是一个类的成员函数:virtual 返回类型 函数名 (参数表)关键字virtual 指明该成员函数为虚函数。...原创 2022-08-10 22:36:24 · 1560 阅读 · 1 评论 -
C++ 14:继承构造顺序,static继承问题,继承顺序问题,同名隐藏,菱形继承,final关键字
继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能。这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构。体现了由简单到复杂的认识过程。class派生类名virtual访问限定符基类类名{...};class派生类名访问限定符virtual基类类名{...}virtual关键字只对紧随其后的基类名起作用代码示例public};运行结果代码图解httpshttpshttps。...原创 2022-07-28 16:23:14 · 423 阅读 · 1 评论 -
C++ 13:面向对象,继承,1-100相加
由继承而来的派生类对象,是能够调用父类的函数,但不能调函数也不能调用析构函数。封装(Encapsulation)是面向对象程序设计最基本的特性,把数据(属性)和函数(方法,操作)合成一个整体,这在计算机世界中是用类与对象实现的。在面向对象程序设计中,继承和派生是构造出新类型的过程,呈现类型设计的层次结构,体现了程序设计人员对现实世界由简单到复杂的认识过程。基类的指针可以引用派生类对象,可以用派生类给基类赋值,但是基类不能给派生类赋值(不安全,多态,强制类型转化)私有成员在类内能被继承,不能被访问。.....原创 2022-07-26 21:11:07 · 797 阅读 · 0 评论 -
C++ 12:函数模板,模板函数,类模板
在编译main()函数中,由编译函数模板(functrontemplate)而生成的函数,称为模板函数(templatefunction).这两个概念须分清楚。原创 2022-07-26 13:39:05 · 447 阅读 · 0 评论 -
C++ 11:对象与对象的关系,类模板
用一个带箭头的虚线表示,描述一个对象在运行期间会用到另一个对象的关系;临时性关系,随着运行时的变化,依赖关系也可能发生变化;依赖也有方向单向依赖,双向依赖,保持单向,杜绝双向关联关系是用一条直线表示,描述不同类的对象之间的结构关系,是一种静态关系,通常与运行状态无关,一般由常识等因素来决定一般用来定义对象之间的静态的、天然的结构,所以关联关系是一种“强关联”关系;关联关系默认不强调方向,表示对象间相互知道;关联对象通常是以成员属性(对象)或引用的形式实现;弱关联无生存期限制强关联。......原创 2022-07-22 17:10:14 · 873 阅读 · 0 评论 -
C++ 10:对象池
提前保存大量的资源,以备不时之需以及重复使用,池化技术应用广泛,如内存池,线程池,连接池(网络链接池,数据库链接池)等等。由于在实际应用当做分配内存、创建进程、线程都会设计到一些系统调用,系统调用需要导致程序从用户态切换到内核态,是非常耗时的操作。因此,当程序中需要频繁的进行内存申请释放,进程、线程创建销毁等操作时,通常会使用内存池、进程池、线程池技术来提升程序的性能。池化对连接或线程的复用,并对复用的数量、时间等进行控制,从而使得系统的性能和资源消耗达到最优状态。不完美转发完美转发。.........原创 2022-07-22 11:05:00 · 2186 阅读 · 2 评论 -
C++ 9:友元,范围for,静态成员
友元friend机制允许一个类授权其他的函数访问类产生对象的非公有成员。友元声明以关键字friend开头,它只能出现在类的声明中,它们不受其在类体中的public,private和protected区的影响。友元函数不是类的成员函数,在函数体中访问对象的成员,必须用对象名加运算符"."加对象成员名。但友元函数可以访问类产生对象的所有成员,一般函数只能访问类中的公有成员。友元函数不受类中的访问权限关键字限制,可以把它放在类的公有、私有、保护部分,但结果一样。某类的友元函数的作用域并非该类作用域。......原创 2022-07-20 16:40:53 · 227 阅读 · 0 评论 -
C++ 8:MyString(柔性数组,写时拷贝)
数组大小声明为0,或者不给出大小,称之为柔性数组。注意全局数组和局部数据不能这样定义柔性数组是一种数组大小待定的数组。在c语言中,可以使用结构体产生柔性数组,结构体的最后一个元素可以是大小未知的数组。data是标识符,不占用存储空间。//柔性数组structStrNode{intref;//引用个数intlen;//字符串长度intsize;//字符串空间大小chardata[];};.........原创 2022-07-18 14:52:36 · 651 阅读 · 2 评论 -
C++ 7:深拷贝和浅拷贝,,值类型,构造函数和拷贝构造函数,函数重载,移动构造函数和移动赋值函数
1.3 怎么判断是否为内核资源?1.4 深拷贝构造函数1.5 为什么使用深拷贝构造函数?防止自赋值1.左值和将亡值合称泛左值,纯右值和将亡值合称右值。2.函数执行时生成将亡值,函数结束将亡值死亡。3.严格来讲,“左值"是表达式的结果的一种属性,但更为普遍地,我们通常用"左值"来指代左值表达式。所谓左值表达式,就是指求值结果的值类别为左值的表达式。通常我们无需区分"左值"指的是前者还是后者,因为它们表达的是同一个意思,不会引起歧义。在后文中,我们依然用左值指代左值表达式。对于纯右值和将亡值,亦然原创 2022-07-06 13:28:20 · 380 阅读 · 0 评论 -
C++ 6:MVC日历系统(项目)
文章目录1. 日历系统1. 日历系统获得当前时间#include<iostream>#include<time.h>//time_t tm#include<string.h>using namespace std;class CDateTime{private: //年 月 日 时 分 秒 int year; int month; int day; int hour; int min; int sec;public: CDateTi原创 2022-06-01 16:50:34 · 262 阅读 · 0 评论 -
C++:线上课程3_4——3_5(alloc)
文章目录一、二、一、二、原创 2022-04-24 15:33:51 · 1646 阅读 · 0 评论 -
C++:线上课程3_1(map)
文章目录一、lambda表达式1. lambda引入2.lambda表达式优点3.lambda表达式的概念和基本用法二、map1.map分类2.成员类型3. 元素访问4. 代码示例5.typedef和using关键字的区别6.无序map和普通map一、lambda表达式1. lambda引入lambda表达式是C++11最重要也最常用的一个特性之一。其实在c#3.5中就引入了lambda,Java则至今还没引入,要等到Java 8中才有lambda表达式。lambda来源于函数式编程的概念,也是现原创 2022-04-14 23:23:28 · 737 阅读 · 0 评论 -
C++:线上课程2_28(STL list)
文章目录一、STL1.几种插入函数的区别2.vector和智能指针二、List1、List存储结构一、STL1.几种插入函数的区别 objevc.reserve(100);//只进行空间的扩充,不进行对象的创建 objevc.resize(100);//既进行空间的扩充,又进行对象的创建class Object{private: int value;public: Object(int x = 0) :value(x) { cout << " Object "原创 2022-04-13 20:27:11 · 1016 阅读 · 0 评论 -
C++:线上课程2_26(vector)
文章目录一、Vector1. vector 源码剖析与仿写2. 容器初始化3. 元素访问4. 迭代器二、1.2.一、Vector1. vector 源码剖析与仿写vector简介:1.vector是表示可以改变大小的数组的序列容器。// SegList2.vector与数组一样,元素使用连续的存储空间,就可以使用常规指针,指向其元素,使用偏移量来访问存储空间中的元素。3.vector与数组不同的是,vector的大小可以动态变化,容器会自动扩容存储空间。4.vector使用一个动态分配的连续原创 2022-04-10 17:21:59 · 790 阅读 · 0 评论 -
C++:线上课程2_25(菱形继承,STL)
文章目录一、 菱形继承1. SGI STL2. C++子集二、菱形继承1.虚继承2.一、 菱形继承1. SGI STLStepanov在离开HP之后,就加入到了SGI 公司,并和Matt Austern等人开发了SGI STL。严格意义上来说,它是 HP STL 的一个继承版本。和 HP STL一样,SGI STL也是开源的,其源代码的可读性可非常好,并且任何人都可以修改和销售它。注意,和STL官方版本来说,SGI STL只能算是一个“民间”版本,因此并不是所有支持C++的编译器都支持使用SGI原创 2022-04-09 14:10:17 · 976 阅读 · 0 评论 -
C++:线上课程2_22(shared_ptr指针)
文章目录一、工厂模式1.静态函数2.工厂模式3.抽象工厂模式智能指针表达法4.工厂方法的隐藏二、Boost提供的智能指针1.分类2.初始化std方法一、工厂模式1.静态函数在进入主函数之前对静态成员进行初始化class Object{private: int value; static int num; static Object objx;public: Object(int x=0) :value(x) {}};int Object::num = 10;Object Obj原创 2022-04-03 14:39:13 · 713 阅读 · 0 评论 -
C++:线上课程2_21(weak-ptr指针)
文章目录一、weak_ptr指针1.观察器2.二、1.2.一、weak_ptr指针1.观察器use_count返回管理该对象的shared_ptr对象数量expired检查被引用的对象是否已删除lock创建管理被引用的对象的shared_ptrowner_before提供弱指针的基于拥有者顺序2.二、1.2....原创 2022-04-02 16:57:56 · 928 阅读 · 0 评论 -
C++:线上课程2_19(共享智能指针shared_ptr)
文章目录一、智能指针(shared_ptr)1.观察器2.共享指针3.相互引用一、智能指针(shared_ptr)1.观察器get返回存储的指针operator*/operator->解引用存储的指针operator[]提供到被存储数组的带下标访问use_count返回shared_ptr所指对象的引用计数unique检查所管理对象是否仅由当前shared_ptr的实例管理operator bool检查是否有关联的管理对象owner_原创 2022-03-29 21:53:16 · 96 阅读 · 0 评论 -
C++:线上课程2_18(智能指针unique_ptr和工厂模式)
文章目录一、动态内存管理( 辅助类)1.default_delete(unique_ptr的默认删除器)二、1.2.一、动态内存管理( 辅助类)1.default_delete(unique_ptr的默认删除器)二、1.2.原创 2022-03-29 00:02:43 · 723 阅读 · 0 评论 -
C++:线上课程2_15(智能指针auto_ptr)
RAII与智能指针auto_ptr的弃用原因unique_ptr的使用shared_ptr的使用&线程安全weak_ptr的作用文章目录智能指针1.什么是RAII?2.RAII的原理3.裸指针3.1裸指针存在问题4.智能指针(my_auto_ptr弃用)4.1示例14.2示例24.3示例34.4完整代码5.智能指针(拥有独有对象所有权语义的智能指针)5.1unique_ptr指针特点5.2unique_ptr全部代码5.3代码示例(unique_ptr代码示例)5.4代码示例(uniq.原创 2022-03-25 19:40:09 · 109 阅读 · 0 评论 -
C++:线上课程2_14(简单工厂模式)
文章目录一、多态1.动态联编2.二、使用步骤1.2.一、多态1.动态联编联编是指计算机程序自身彼此关联的过程,是把一个标识符和一个存储地址联系在一起的过程,也就是把一条消息和一个对象的操作相结合的过程。如果使用虚基类指针或引用指明派生类对象并使用该指针调用虚函数(成员选择符用箭头号"->"),则程序动态地(运行时)选择该派生类代的虚函数,称为动态联编。动态联编亦称滞后联编。如果使用对象名字和点成员选择运算符" . "引用特定的一个对象来调用虚函数,则被调用的虚函数是在编译时期确定的(称原创 2022-03-24 21:54:05 · 112 阅读 · 0 评论 -
C++:线上课程2_12(多态和虚函数)
文章目录@[TOC](文章目录)一、多态1.多态定义2.多态分类2.1编译时的多态2.2运行时的多态二、虚函数1.定义2.读入数据总结一、多态1.多态定义多态性是面向对象程序设计的关键技术之一。若程序设计语言不支持多态性,不能称为面向对象的语言。利用多态性技术,可以调用同一个函数名的函数,实现完全不同的功能。2.多态分类2.1编译时的多态(早期绑定)名字粉碎技术实现通过函数的重载和运算符的重载来实现的示例:int Max(int a, int b){ return a > b ?原创 2023-09-26 16:26:16 · 192 阅读 · 0 评论 -
C++:线上课程1_28(List2)
文章目录一、pandas是什么?二、使用步骤1.引入库2.读入数据一、pandas是什么?二、使用步骤1.引入库代码如下(示例):import numpy as npimport pandas as pdimport matplotlib.pyplot as pltimport seaborn as snsimport warningswarnings.filterwarnings('ignore')import sslssl._create_default_https_cont原创 2022-03-20 14:54:50 · 318 阅读 · 0 评论 -
C++:线上课程1_27(List)
文章目录一、List容器1.示例:2.类型重命名3.继承关系3.1继承种类3.2.同名隐藏二、List双链表1.引入库2.读入数据总结一、List容器1.示例:class Array{ int* ptr;public: Array(int x) { ptr = new int[10]; for (int i = 0; i < 10; i++) { ptr[i] = x; } } void fun() const//this指针实体不允许改变 { for原创 2022-03-19 14:39:07 · 193 阅读 · 0 评论 -
C++:线上课程1_26(STL链表)
文章目录一、String二、STL链表1.链表2.迭代器示例一、Stringrealloc函数使用strcpy函数使用strcat函数使用#define _CRT_SECURE_NO_WARNINGS#include"stdio.h"#include<iostream>#include<stdlib.h>#include<assert.h>#include<string.h>#include<vector>#include&原创 2022-03-17 15:49:46 · 302 阅读 · 0 评论 -
C++:线上课程1_23(单例模式)
友元,静态成员,单例模式map表for循环一、友元二、静态成员1.静态关键字1.1c语言静态关键字修饰局部变量1.2静态关键字修饰全局变量和函数1.3静态关键字修饰类2.静态关键字之用法3.单例模式3.1概念3.2示例3.3单例模式与静态成员3.4如何解决多线程安全问题?3.5静态成员三、模板函数1.函数模板2.模板函数map表元素访问at访问指定的元素,同时进行越界检查(公开成员函数)operator[]访问或插入指定的元素(公开成员函数)for循环for循环新用法#define原创 2022-03-16 16:06:47 · 223 阅读 · 0 评论 -
C++ 5:malloc和new,对象成员方法,实现整型栈,拷贝构造函数,运算符重载,数组名,缺省函数
1.数组名【类型(类型推演)和大小(替换)】int main(){ int ar[10] = { 12,23,34,45,56,67,78,89,90,100 }; sizeof(ar);//代表整个数组 int(*p)[10] = &ar;//整个数组地址 int(&br)[10] = ar;//引用数组}2.模板(1)模板函数在编译的时候进行实例化,实例化时候进行模板推演规则void Print_Ar(Type(&br)[N]){原创 2022-05-19 15:50:47 · 993 阅读 · 0 评论 -
C++ 4:面向对象编程,this指针,初始化对象,构造函数和析构函数,对象的分类
1.B_Tree 的结构设计#include<iostream>#include<stdlib.h>using namespace std;//B-Tree的结构设计#define M 5#define MXSIZE(M-1)#define MINSIZE(M/2)typedef char KeyType;typedef struct {}Record;typedef struct{ KeyType key;//关键码 Record* recp原创 2022-03-11 23:16:53 · 776 阅读 · 9 评论 -
C++ 3:例题示范(矩形类,双向函数,Stack,STL)
1.总结const 与指针的关系#include<iostream>using namespace std;int main(){ const int a = 10; int b = 0; int* p = (int*)&a;//强转去掉a变量的常性(c语言强转) int* s = const_cast<int*>(&a);//强转去掉a变量的常性(比上面更加明确清楚,c++强转) *p = 100; b = a; cout <<原创 2022-03-06 15:15:01 · 555 阅读 · 0 评论 -
C++ 2:new和delete,volatile关键字,auto关键字,基于范围for循环,string简单使用
1.const指针int a = 10, b = 20;int* p1 = &a;const int* p2 = &a;//*p2=100(error) p2=&b;(true) 不可以改变指针指向值,但是可以改变指针自身值int const* p3 = &a;int* const p4 = &a;//*p4=100;(true) p3=&b;(error) 可以改变指针指向的值,但是不能修改指针自身值const int* const p5原创 2022-02-26 00:58:48 · 1200 阅读 · 0 评论 -
C++ 1:C++初始化,输入输出,const关键字,引用,内联,缺省函数,函数重载,左值和右值,函数模板,名字空间
1.&& 逻辑与c=a & b; //位与int* p=&a; //取地址int& x=a; //引用#引用(变量别名)(1)引用必须给予初始化(2)引用不分级,没有空引用(3)引用不能重载,没有引用的引用#常引用 constconst int& c = a;//常引用,c可以读取a的值,但是不能改变a的值#引用作为形参,可以改变x和y的值2.inline函数(内联函数)(1)概念:在C++中,为了解决一些频繁调用的小函数大量消耗栈原创 2022-01-14 17:25:40 · 496 阅读 · 0 评论