初识c++
文章平均质量分 67
神厨小福贵!
C/C++/Linux
展开
-
【C++】单例模式(懒汉、饿汉)
1.什么是单例模式?顾名思义,单例模式就是在这个单例类确保只有一个对象被创建。也就是说这个类只能实例化一个对象。特征:1.单例类最多只能有一个实例; 2.单例类必须自己创建自己唯一的实例; 3.单例类必须给所有其他的对象提供这一实例。2.为什么要有单例模式?首先,单例模式中某一类只能实例化一个对象,然后该类提供了一个全局都可以访问的实例化静态对象,以此来应对程序中某些频繁销毁构建的全局类优点:1.内存中该类只实例化了一个对象,减少了内存的消耗;2.避免资源的重复占用缺点:单例类的话,原创 2022-04-16 19:38:26 · 4211 阅读 · 0 评论 -
【C++】模拟实现多线程中的信号量
二元信号量和一般信号量二元信号量是最简单的一种锁,适合那种被唯一线程访问的资源,而一般信号量就允许多线程并发的访问资源。二元信号量类似于互斥量,但是有一点不同的是,互斥量只能被上锁的那个线程释放,通俗的说就是,哪个线程对互斥量加的锁,就由哪个线程来劲释放。下面来举例证明上述言论,下面来个简单的生产者消费者的例子,拿二元信号量来实现:上述生产者和消费者分别有两个不同定义的信号量初值,生产者的信号量初值为1,消费者信号量初值为0,acquire方法是对信号量减一,release方法是对信号.原创 2022-04-13 17:01:16 · 557 阅读 · 0 评论 -
【C++】多线程(链式、循环队列)实现生产者消费者模式
链式队列和双循环队列实现多线程的生产者和消费者模式原创 2022-03-22 11:30:45 · 6445 阅读 · 2 评论 -
【C++】四种类型的转换
C++四种类型的转换包括这四种:const_cast , static_cast , dynamic_cast , reinterpret_cast先来说下C语言中的类型转换,非常的暴力,就是耍流氓:float a = 12.23;int b = (int)a;下面我写的都是最基础的,简单的,下面这篇文章写的很详细,我还刚学这东西,就只是写一下我自己的理解:c++ 四种强制类型转换介绍_ydar95的博客-CSDN博客_c++指针类型强转c++ 四种强制类型转换介绍const_c原创 2022-03-20 19:17:56 · 274 阅读 · 0 评论 -
【C++】菱形继承
我们先来看下菱形继承的基本视图以及基本的代码结构下面来看下简单的代码以及数据结构:class Person{public: int a_p;};class Studen :public Person{public: int a_st;};class Stuff :public Person{public: int a_sf;};class st_sf :public Stuff, public Studen{public: int a_ss;};原创 2022-03-19 20:24:04 · 625 阅读 · 0 评论 -
【C++】多线程互斥锁、条件变量
我们了解互斥量和条件变量之前,我们先来看一下为什么要有互斥量和条件变量这两个东西,了解为什么有这两东西之后,理解起来后面的东西就简单很多了!!!先来看下面这段简单的代码:...原创 2022-03-17 16:57:26 · 1061 阅读 · 0 评论 -
【C++】多线程thread
进程和线程的区别:进程是资源分配的最小单位,线程是CPU调度的最小单位 进程有自己的独立地址空间,线程共享进程中的地址空间 进程的创建消耗资源大,线程的创建相对较小进程的切换开销大,线程的切换开销相对较小 进程:程序执行的过程叫进程。线程:进程内部的一条执行序列或执行路径,一个进程可以包含多条线程(多线程)!每个进程最少有一个线程,例如下面代码:#include <iostream>using namespace std; int main(){原创 2022-03-16 17:58:39 · 1362 阅读 · 0 评论 -
【C++】多态(早期绑定、后期绑定)、抽象类(纯虚函数)、虚析构函数
我们都知道面向对象编程的三大特征是封装、继承、多态,今天我们就来说一下其中之一的多态。概念:多态:多态字面意思就是多种形态,C++ 多态意味着调用成员函数时,会根据调用函数的对象的类型来执行不同的函数。多态分类:多态分为编译时多态(早期绑定)和运行时多态(后期绑定)...原创 2022-03-15 12:55:11 · 1123 阅读 · 0 评论 -
【C++】虚函数
虚函数是构成C++多态的重要一步,今天来说一下虚函数!虚函数:在基类(或父类)中,使用virtual关键字对函数进行声明为并在一个或多个派生类(子类)中被重新定义的成员函数,通过指向派生类的基类指针或引用,访问派生类中同名覆盖成员函数。它的用法是这样的:virtual + 函数返回类型 + 函数名 +(参数表) {函数体}首先我们要知道为什么要有虚函数这个东西?我来看下下面这两段代码的结果再来说结果:class A{public: void fun() { cout原创 2022-03-14 11:20:31 · 895 阅读 · 0 评论 -
【C++】继承
继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能。这样产生新的类,称派生类(子类),被继承的类称为基类(父类,现在还有一种叫法交超类)。继承呈现了面向对象程序设计的层次结构。体现了由简单到复杂的认识过程。继承的方式有三种:公有继承,私有继承,保护继承,那么这三种继承方式有什么不同呢?无论是私有继承,公有继承,还是保护继承,在对于派生类的成员函数来说的话,只有在基类的private的成员变量在派生类中是不可原创 2022-02-20 22:17:39 · 307 阅读 · 0 评论 -
【C++】typedfe和宏定义的区别
先来说结论原创 2022-02-19 00:00:17 · 998 阅读 · 1 评论 -
【C++】左值、右值、移动拷贝构造函数、移动赋值函数
左值和右值的定义以及区别:原创 2022-02-16 06:00:00 · 888 阅读 · 0 评论 -
【C++】何时需要自定义拷贝构造函数和赋值符
先来说结论:当类中有指针类型成员变量的时候,一定要自定义拷贝构造和赋值运算符原因:当我们在有指针类成员变量的时候,还是用默认拷贝构造函数(拷贝构造函数执行的时候会调用赋值符),默认赋值为浅拷贝,会导致两个对象指向同一块堆区空间,在最后析构的时候导致内存二次析构而出错!下面来看一下代码的示例:#include<iostream>using namespace std;#include<string.h>#define SIZE 10class SeqLis原创 2022-02-11 16:27:39 · 1612 阅读 · 2 评论 -
内联函数inline
本文讲述了inline函数的使用以及为什么需要使用inline函数,还有inline函数与宏的区别!原创 2022-01-07 23:45:00 · 774 阅读 · 0 评论 -
顺序表的尾插和头插
先来看顺序表的结构体设计#define MAXSIZE 10 //顺序表一般固定大小struct SeqList{ int data[MAXSIZE]; int capacity; //顺序表容量大小 int cursize; //顺序表中有效数据节点个数}SeqList , *PSeqList; //结构体指针和结构体别名尾插:void Push_Back(PSeqList plist , int val){ assert(plis原创 2021-10-20 14:32:18 · 731 阅读 · 0 评论 -
C++ 中this指针的用途
先说结论:1.形参和变量同名时,可用this指针来区分2.再类的非静态成员函数中返回本身,可用return *this原创 2021-09-28 23:28:51 · 262 阅读 · 2 评论 -
成员变量和成员函数分开存储
首先来说结论: 1.在C++中,类内的成员变量和成员函数分开存储 2.只有非静态成员变量才属于类的对象上空类(类中上面对象都没没有)占用内存大小为:1#include <iostream>#include <string>using namespace std;class Person{};void test01(){ Person p; cout << "空类的内存大小:" << s...原创 2021-09-22 23:29:32 · 533 阅读 · 1 评论 -
对象特性---->深拷贝与浅拷贝
浅拷贝:简单的赋值拷贝操作。深拷贝:在堆区申请一块空间,进行拷贝操作。浅拷贝:编译器提供的拷贝构造函数对传入值进行赋值拷贝操作#include<iostream>using namespace std;class Person{public: Person() { cout << "Person无参构造函数的调用" << endl; } Person(int age) { cout << "Person有参构造函数的原创 2021-09-17 15:22:03 · 142 阅读 · 0 评论 -
对象特性--构造函数调用规则
默认情况下,C++编译器至少给一个类添加3个函数:1.默认构造函数(无参,函数体为空)2.默认析构函数(无参,函数体为空)3.默认拷贝构造函数,对属性进行值拷贝1、创建一个类,C++编译器会给每个类都添加至少3个函数#include<iostream>using namespace std;//构造函数的调用规则//1、创建一个类,C++编译器会给每个类都添加至少3个函数// 默认构造(空实现)//析构函数(空实现)//拷贝构造(值拷贝)Iclass Pers原创 2021-09-17 14:04:45 · 141 阅读 · 0 评论 -
对象特性-----拷贝构造函数的调用
C++中拷贝构造函数调用通常三种情况:****使用一个已经创建完毕的对象来初始化一个新对象****值传递的方式给函数参数传值****以值方式返回局部对象#include<iostream>using namespace std;class Person {public: Person() //无参(默认)构造函数 { cout << "Person无参构造函数的调用" << endl; } Person(int age) {原创 2021-09-16 23:41:16 · 207 阅读 · 0 评论 -
对象特性-构造函数和析构函数
基础概念:构造函数:是一种特殊的方法。主要用来在创建对象时初始化对象,即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中。特别的一个类可以有多个构造函数 ,可根据其参数个数的不同或参数类型的不同来区分它们 即构造函数的重载 析构函数:析构函数(destruct) 与构造函数相反,当对象结束其生命周期时(例如对象所在的函数已调用完毕),系统自动执行析构函数。析构函数往往用来做“清理善后” 的工作(例如在建立对象时用new开辟了一片内存空间,delete会...原创 2021-09-16 21:16:36 · 148 阅读 · 0 评论 -
C++类的案例(二)
图片摘自:黑马程序员匠心之作|C++教程从0到1入门编程,学习编程不再难_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1et411b73Z?p=105点和圆的关系就三种,圆上,圆外,圆内首先创建一个圆类class Circle{public: void setR(int r) { m_R = r; } int getR() { return m_R; } void setCenter(Point center).原创 2021-09-12 22:00:49 · 127 阅读 · 0 评论 -
C++类的案例(一)
例一:设计一个立方体类图片取自黑马程序员匠心之作|C++教程从0到1入门编程,学习编程不再难_哔哩哔哩_bilibili配套环境搭建教程av44145245本教程分为7个阶段,涵盖基础入门到实战项目,第1阶段-C++基础入门,第2阶段实战-通讯录管理系统,第3阶段-C++核心编程,第4阶段实战-基于多态的企业职工系统第5阶段-C++提高编程第6阶段实战-基于STL泛化编程的演讲比赛第7阶段-C++实战项目机房预约管理系统视频全套出自http://yun.itheima.com/course/520.ht原创 2021-09-11 21:34:47 · 3857 阅读 · 0 评论 -
函数重载需要注意的点
基本概念:作用:函数名可以相同,提高复用性函数重载满足的条件:1.同一作用域2.函数名相同3.函数参数类型不同,个数不同,顺序不同基本规则就上面那几条,不多说了,开始难一些的东西:1.函数的返回类型不能当作重载的条件:void func(){ cout << "我好帅" << endl;}int func(){ cout << "我好帅" << endl;}以上代码会出现下图报错,也就是说一个是void.原创 2021-09-09 21:50:57 · 713 阅读 · 0 评论 -
C++中引用(&)的用法和举例说明
基础语法:作用:给变量起别名语法格式:数据类型 &别名 = 原名a = 10;int &b = a; //此时b也等于10,对b的任何操作相当于对a进行操作基础用法及规则1.引用必须初始化int &b; //该形式是错误的 必须初始化。即改为下面代码int &b = a;2.引用在初始化后不可改变int a = 10;int c = 10;int &b = a;int &b = c; .原创 2021-09-06 14:20:43 · 483 阅读 · 0 评论 -
C++在堆区创建数组
new申请数据空间c++中的new在堆区申请空间的时候的格式是:int * p = new int(10); //该代码的意思就是说在堆区申请的内存赋值为10//int 后面括号里面写的就是你的初始值上面代码有一点需要注意的是,10这个数据在堆区,但是接收它的指针在栈区这得搞清楚上述代码int后面写括号里面是它的初始化的值,但你要是不写任何值的话也可以,系统自动给你初始化为0int main(){ int* p = new int(); cout << *p原创 2021-09-05 21:37:48 · 6517 阅读 · 2 评论 -
c++小项目:通讯录管理系统
该项目非常适合新手c++的同学来做(当然也包括我),先看一个通讯录管理系统需要写什么东西。学习于:https://www.bilibili.com/video/BV1et411b73Z?p=75(自我感觉讲的超级棒)其中值得注意的是调用函数需要传值时,如果不需要改变实参 直接传值就好了,如果需要改变实参,必须得传指针(也就是传址)然后还有个注意的点就是结构体和结构体指针变量的使用,剩下的就敲代码了!得达到上图这些功能,成功之后菜单栏显示如下所示下面就是各个小块..原创 2021-09-03 21:58:43 · 295 阅读 · 0 评论 -
用c++写一个猜数字的小游戏
代码都很简单,就不细细说了,值得注意的一些就是:对于初学c++的小伙伴来说,c++很多基础东西都和c语言有着一定的区别,例如头文件的写法,读入和输出的写法都不一样。例如下面这个小游戏中囊括了time这个头文件,在c语言中直接写#include<time.h>但是在c++中得写成#include<ctime>,这是因为time是c语言的库函数,c++中使用的时候得加一个c,并且不写.h,但有一点值得注意的是,如果在c++中引入自定义的库函数的时候,也得加上.h,下面不废话了,直接上原创 2021-08-31 00:52:21 · 1615 阅读 · 2 评论