![](https://img-blog.csdnimg.cn/20190918140129601.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
C/C++
文章平均质量分 57
C/C++
嵌入式_笔记
!
展开
-
C++ 数据结构哈希表
这里我们用到了一种方法:那就是取姓名的首字母做一个排序,那么这是不是就是通过一些特定的方法去得到一个特定的值,比如这里取人名的首字母,那么如果是放到数学中,是不是就是类似一个函数似的,给你一个值,经过某些加工得到另外一个值,就像这里的给你个人名,经过些许加工我们拿到首字母,那么这个函数或者是这个方法在哈希表中就叫做散列函数。我们取姓名的首字母作为一个标志,就可以很快的找到以这个字母开头的人名了,那么王二也就能更快的被我们找到,我们也不用再费力气去找什么张二和李二的,因为人家的名字首字母都不是w。转载 2022-09-06 22:58:24 · 632 阅读 · 0 评论 -
C++ - String的用法
实例化出的对象是一个管理动态增长的字符数组,以 ‘\0’ 结尾。string类是basic_string模板类的一个实例。使用时需要包含头文件:#include 使用char来实例化basic_string模板类。原创 2022-09-05 22:48:24 · 19 阅读 · 0 评论 -
C++ - 内存泄漏如何避免
内存知识:C语言(计算机专业应该知道的内存知识)_学习&笔记的博客-CSDN博客C语言(计算机专业应该知道的管理内存的数据结构)_学习&笔记的博客-CSDN博客_操作系统实现内存管理常用的数据结构C语言为内存分配空间(代码段、数据段、bss段、存储类、变量的生命周期)_学习&笔记的博客-CSDN博客_内存代码段和数据段1.内存溢出与内存泄漏内存溢出:内存溢出 OOM (out of memory),是指程序在申请内存时,没有足够的内存空间供其使用,原创 2022-05-18 23:44:59 · 747 阅读 · 0 评论 -
C++ - Lambda表达式
一 初识Lambda表达式代码示例:#include<iostream>using namespace std; int main(){ int a = 1; int b = 2; auto func = [=, &b](int c)->int {return b += a + c;}; return 0;}基本语法:Lambda表达式:[capture](parameters) mutable ->return原创 2022-05-12 22:55:14 · 185 阅读 · 0 评论 -
C++ - 智能指针
智能指针就是帮我们C++程序员管理动态分配的内存的,它会帮助我们自动释放new出来的内存,从而避免内存泄漏!内存泄漏的例子:C++中内存泄漏的几种情况_Denny_Zoom的博客-CSDN博客_内存泄漏的几种情况C++造成内存泄漏的原因汇总:_盖伊福克斯的博客-CSDN博客_c++内存泄漏c++内存泄露(一):理解内存泄漏及内存泄漏常见情况_invisible_sky的博客-CSDN博客_c++ 内存泄露一 auto_ptrauto_ptr以前是用在C98中,C++11被抛弃,头文件原创 2022-05-05 23:52:47 · 112 阅读 · 0 评论 -
C++ - 多线程
参考链接:一文详解C++多线程_非晚非晚的博客-CSDN博客_c++多线程一 多线程传统的C++(C++11之前)中并没有引入线程这个概念,在C++11出来之前,如果我们想要在C++中实现多线程,需要借助操作系统平台提供的API,比如Linux的<pthread.h>,或者windows下的<windows.h> 。二 多线程的优缺点优点:有操作系统相关知识的应该知道,线程是轻量级的进程,每个线程可以独立的运行不同的指令序列,但是线程不独立的拥有资源,依赖原创 2022-05-05 22:47:42 · 2274 阅读 · 0 评论 -
C++ - STL标准库
1.C++ STL标准库简介长久以来,软件界一直希望建立一种可重复利用的东西,以及一种得以制造出”可重复运用的东西”的方法,从函数(functions),类别(classes),函数库(function libraries),类别库(class libraries)、各种组件,从模块化设计,到面向对象(object oriented ),为的就是复用性的提升。复用性必须建立在某种标准之上。但是在许多环境下,就连软件开发最基本的数据结构(datastructures) 和算法(algori原创 2021-12-25 22:18:09 · 11957 阅读 · 2 评论 -
C++ - 泛性编程单例类模板
1.单例模式(设计模式)在架构设计时,某些类在整个系统生命期中最多只能有一个对象存在(Single Instance)原创 2021-08-18 22:55:36 · 383 阅读 · 0 评论 -
C++ - 泛性编程数组类模板
1.预备知识模板参数可以是数值型参数:T泛指类型,N必须为常数。2.数值型模板参数的限制模板参数必须为常数。变量不能作为模板参数(变量在编译期间不能确定数值)。浮点数不能作为模板参数(计算机内部中浮点数表示不精确)。类对象不能作为模板参数(类对象也不能唯一确定)。本质:模板参数是在编译阶段被处理的单元,因此,在编译阶段必须准确无误的唯一确定。代码示例:数值型模板参数#include <iostream>#include <strin.原创 2021-08-17 22:22:05 · 359 阅读 · 0 评论 -
C++ - 泛性编程类模板的特定实现
1.多参数类模板类模板可以定义任意多个不同的类型参数:函数模板也可以支持多个不同类型参数。使用类模板必须一一指定类型,函数模板可以不用。2.类模板可以被特化指定类模板的特定实现。部分类型参数必须显示指定。根据类型参数分开实现类模板。特殊化为只接受一个类型(T1和T2类型相同)。在指定实际类型时,如果T1和T2类型相同,编译器会优先使用右边的模板。编译器会根据实际情况分析使用左边或者右边。编译器认为这两个模板是同一个,在使用的时候会根据参数进行选择使用。部.原创 2021-08-17 21:13:52 · 457 阅读 · 0 评论 -
C++ - 泛性编程类模板的概念
1.类模板-> 一些类主要用于存储和组织数据元素。-> 类中数据组织的方式和数据元素的具体类型无关。-> C++中将模板的思想应用于类,使得类的实现不关注数据元素的具体类型,而只关注类所需要实现的功能。C++中的类模板:-> 以相同的方式处理不同的类型。-> 在类声明前使用template进行标识。-> <typenameT>用于说明类中使用的泛指类型T。代码示例:类模板template < typename T..原创 2021-08-16 22:44:26 · 98 阅读 · 0 评论 -
C++ - 泛性编程函数模板应该注意的事
1.函数模板函数模板深入理解(本质):-> 编译器从函数模板通过具体类型产生不同的函数。-> 编译器会对函数模板进行两次编译,第一次对模板代码本身进行编译,第二次对参数替换后的代码进行编译。注意事项:-> 函数模板本身不允许隐式类型转换。-> 自动推导类型时,必须严格匹配(匹配严格,没有隐式类型转换,有点像函数重载)。-> 显示类型指定时,能够进行隐式类型转换。代码示例:函数模板的本质#include <iostream>#i原创 2021-08-16 21:20:16 · 203 阅读 · 0 评论 -
C++ - 泛型编程函数模板的概念
1.通过实际案例了解泛型编程函数模板的概念交换变量的方法:定义宏代码块 VS 定义函数#include <iostream>#include <string> using namespace std; #define SWAP(t, a, b) \do \{ \ t c = a; \ a = b; ...原创 2021-08-16 00:38:46 · 115 阅读 · 0 评论 -
c++ - 含有虚函数类的sizeof
1.一般情况下代码示例:#include<iostream>using namespace std;class base{ public: base()=default; ~base()=default; private: static int a; int b; char c;};int main(){ base obj; cout<<sizeof(obj)<<end原创 2021-12-23 23:33:56 · 645 阅读 · 0 评论 -
C++ - 多继承方式会产生多个虚函数表
1.多重继承可能产生多个虚函数表代码示例:会产生多个虚函数表#include <iostream>#include <string> using namespace std; class BaseA{public: virtual void funcA() { cout << "BaseA::funcA()" << endl; }}; class BaseB{public:原创 2021-08-15 21:58:24 · 2749 阅读 · 0 评论 -
C++ - 多重继承可能产生冗余的成员
1.C++支持编写多重继承-> 一个子类可以拥有多个父类。-> 子类拥有所有父类的成员变量。-> 子类继承所有父类的成员函数。-> 子类对象可以当作任意父类对象使用。多重继承模板:class Derived : public BaseA, public BaseB, public BaseC{ // ......};代码示例:多重继承#include <iostrea原创 2021-08-15 00:09:02 · 265 阅读 · 0 评论 -
c++ - 虚函数表
1.什么是虚函数表所谓虚函数表就是存放着当前类中所有虚函数地址的表。在实例化一个具有虚函数的类时,这个表也被分配到这个实例对象的内存中,通过虚函数表可以指明所要调用的函数的位置。在C++编译器中虚函数表的地址存放在对象的最前面,这是为了即使多继承下也能快速获取到虚函数表。代码示例:class Base{public: virtual void A(){cout << "Base::A()" << endl;} virtual void B(){cout &原创 2021-12-23 22:46:31 · 2247 阅读 · 0 评论 -
C++ - 对象的内存布局
1.class与struct-> class是一种特殊的struct。-> 在内存中class依旧可以看作变量的集合。-> class与struct遵循相同的内存对齐规则。-> class中的成员函数与成员变量是分开存放的。-> 每个对象有独立的成员变量。-> 所有对象共享类中的成员函数。代码示例:对象的内存分布#include <iostream>#include <string> using namesp原创 2021-08-14 23:07:47 · 286 阅读 · 0 评论 -
C++ - 函数重写必须多态实现,否则没有意义
1.函数重写顾虑-> 父类中被重写的函数依然会继承给子类。-> 子类中重写的函数将覆盖父类中的函数。-> 虽然被重写覆盖了,但通过作用域分辨符(::)可以访问到父类中的函数。Child c;Parent* p = &c; c.Parent::print(); //从父类中继承c.print(); //在子类中重写 p->print(); //父类中定义 (我们期望调用子类中的原创 2021-08-15 23:18:01 · 729 阅读 · 1 评论 -
C++ - 子类与父类的同名成员变量
1.思考子类中是否可以定义父类中的同名成员?如果可以,如何区分?如果不可以,为什么?代码示例:#include <iostream>#include <string> using namespace std; class Parent{public: int mi;}; class Child : public Parent{public: int mi;}; int main(){ Child c;原创 2021-08-14 21:12:31 · 8682 阅读 · 1 评论 -
C++ - 三种继承方式
1.三种继承方式public: 公共权限。protected: 保护权限。private: 私有权限。2.有趣的问题是否可以将继承语句中的public换成protected或者private?如果可以,与public继承有什么区别?C++中支持三种不同的继承方式:public继承:-> 父类成员在子类中保持原有访问级别。private继承:-> 父类成员在子类中变为私有成员。protected继承:-> 父类中的公有成员变为保护成员...原创 2021-08-12 23:03:32 · 2638 阅读 · 2 评论 -
C++ - 继承中的访问级别
1.问题:子类是否可以直接访问父类的私有成员?答案:子类不能直接访问父类的私有成员!代码示例:验证子类不能直接访问父类的私有成员。编程实验继承中的访问级别44-1.cpp#include <iostream>#include <string> using namespace std; class Parent{private: int mv;public: Parent() { mv = 100; .原创 2021-08-12 22:05:40 · 1146 阅读 · 0 评论 -
C++ - 继承的概念
1.生活中的例子原创 2021-08-12 21:25:46 · 241 阅读 · 0 评论 -
C++ - 前置操作符++i与后置操作符i++
1.值得思考的问题原创 2021-08-12 00:29:28 · 560 阅读 · 0 评论 -
C++ - 自定义的重载逗号(,)操作符函数
这是学习C++知识很难注意到的一个点,耐心琢磨,会有收获。1.逗号操作符逗号操作符(,)可以构成逗号表达式:-> 逗号表达式用于将多个子表达式连接为一个表达式。-> 逗号表达式的值为最后一个子表达式的值。-> 逗号表达式中的前N-1个子表达式可以没有返回值。-> 逗号表达式按照从左向右的顺序计算每个子表达式的值。代码示例:#include <iostream>#include <string> using names原创 2021-08-11 23:11:14 · 475 阅读 · 0 评论 -
C++ - 逻辑操作符(&& , || )应该注意的事
1.逻辑运算符的结果最终结果只能是true或者false。逻辑表达式不用完全计算就能确定最终值(重点理解这句话)。代码示例:#include <iostream>#include <string> using namespace std; int func(int i){ cout << "int func(int i) : i = " << i << endl; return i;}原创 2021-08-11 01:46:01 · 763 阅读 · 0 评论 -
C++ - 运算符重载
1.从函数重载说起-> 函数重载是在一定作用域内,多个函数名相同但参数列表不同的函数重载。-> 编译时由编译器根据实际调用时给的实参情况来判定本次实际用哪个函数,这个过程叫重载决策。2.运算符重载譬如+ - * / %等算术运算符和> < == !=等关系运算符就是典型的可重载运算符(但不是所有的运算符都可以重载,譬如sizeof)。编译器为每个类默认重载了赋值操作符。代码示例:#include <iostream>using na.原创 2021-08-08 01:33:10 · 501 阅读 · 0 评论 -
C++ - 类中的函数重载
1.回顾函数重载-> 函数重载的本质为相互独立的不同函数。-> C++中通过函数名和函数参数确定函数调用。-> 无法直接通过函数名得到重载函数的入口地址。->函数重载必然发生在同一个作用域中。2.类中的重载类中的成员函数可以进行重载:-> 构造函数的重载。-> 普通成员函数的重载。-> 静态成员函数的重载。代码示例:#include <stdio.h>class Test{ int i;.原创 2021-08-06 23:59:23 · 1431 阅读 · 1 评论 -
C++ - 静态成员变量和静态成员函数
1.回顾类的成员变量-> 通过对象名能够访问public成员变量。-> 每个对象的成员变量都是专属的。-> 成员变量不能在对象之间共享。2.新的需求:统计在程序运行期间某个类的对象数目,随时可以获取当前对象的数目。代码实践:没有使用静态成员变量之前并不能获取当前对象的数目。#include <stdio.h>class Test{private: int mCount;public: Test() : mCount(0原创 2021-08-06 23:12:23 · 433 阅读 · 0 评论 -
C++ - 友元函数与友元类
1.友元的概念-> 友元是C++中的一种关系。-> 友元关系发生在函数与类之间或者类与类之间。-> 友元关系是单项的,不能传递。-> 函数是类的友元。2.友元的用法-> 在类中以friend关键字声明友元。-> 类的友元可以是其它类或者具体函数。-> 友元不是类的一部分。-> 友元不受类中访问级别的限制。-> 友元可以直接访问具体类的所有成员。代码示例:#include <stdio.h&.原创 2021-08-06 21:30:39 · 140 阅读 · 0 评论 -
C++ - 析构函数
1.对象的销毁一般而言,需要销毁的对象都应该做清理。-> 为每一个类提供一个public的free函数.-> 对象不再需要时立即调用free函数进行清理。-> free只是一个普通的函数,必须显示的调用。-> 对象销毁前没有做清理,很可能造成资源泄漏。2.析构函数C++的类中可以定义一个特殊的清理函数:-> 这个特殊的清理函数叫做析构函数。-> 析构函数的功能和构造函数相反。定义:~ClassName()-> 析.原创 2021-08-05 21:20:43 · 857 阅读 · 0 评论 -
C++ - 对象的构造顺序
1.对象构造的顺序局部对象:当程序执行流到达对象的定义语句时进行构造。对于堆对象:当程序执行流到达new语句时创建对象,使用new创建对象将自动触发构造函数的调用。对于全局对象:对象的构造顺序是不确定的,不同的编译器使用不同的规则确定构造顺序。2.局部对象:当程序执行流到达对象的定义语句时进行构造。代码示例:#include <stdio.h>class Test{private: int mi;public: Test(int i)原创 2021-08-05 22:02:53 · 337 阅读 · 0 评论 -
C++ - 带参构造函数,拷贝构造函数
1.带有参数的构造函数-> 构造函数可以根据需要定义参数。-> 一个类中可以存在多个重载的构造函数。-> 构造函数的重载遵循C++重载的规则。#include <stdio.h>class Test{public: Test() { printf("Test()\n"); } Test(int v) { printf("Test(int v), v = %d\n", v..原创 2021-08-05 19:23:28 · 1174 阅读 · 0 评论 -
C++ - 构造函数
1.对象中成员变量的初始值-> 在栈上创建对象时,成员变量初始为随机值。-> 在堆上创建变量时,成员变量初始为随机值。-> 在静态存储区创建变量时,成员变量初始为0值。#include <stdio.h>class Test{private: int i; int j;public: int getI() { return i; } int getJ() { return j; }};Test gt; //在全原创 2021-08-04 22:42:17 · 92 阅读 · 0 评论 -
C++ - 类的真正形态
1.类的真正形态经过不停的改进,结构体struct变得越来越不像它在C语言中的样子了,C++中提供了新的关键字class用于类定义,class和struct的用法是完全相同的。2.class和struct的区别在使用struct定义类时,所有成员的默认访问级别为public。在用class定义类时,所有成员的默认访问级别为private。代码示例:#include <stdio.h>//在用struct定义类时,所有成员的默认访问级别为pubilst.原创 2021-08-05 22:50:06 · 88 阅读 · 0 评论 -
C++ - 类的封装与类成员的作用域
1.类的封装当使用类时,不需要关系其实现细节。当创建类时,才需要考虑其内部实现细节。例:-> 普通用户使用手机:只需要学习如何发短信,打电话,拍照。-> 手机工程师:需要考虑手机内部的实现细节。2.封装的基本概念-> 根据经验:并不是类的每个属性都是对外公开的如:女孩子不希望外人知道自己的体重和年龄。 男孩子不希望别人知道自己的身高和收入。-> 而一些类的属性是对外公开的如:人的姓名,学历。-> 必须在类的表示法中定义属...原创 2021-08-02 23:34:32 · 218 阅读 · 0 评论 -
C++ - 函数对象分析
案例分析:1.编写一个函数函数可以获得斐波那契数列每项的值,每调用一次返回一个值,函数可根据需要重复使用。思路:斐波那契数列,递推公式:代码示例:#include <iostream>#include <string> using namespace std; int fib() //带状态函数,用静态变量记录状态{ static int a0 = 0; static int a1 = 1; int ret =原创 2021-08-11 00:29:45 · 568 阅读 · 0 评论 -
C++ - 面向对象思想的引入
生活示例引入,耐心看完,收获很大。日常生活中,我们习惯对事物进行分类,这种分类思想也可以引入程序设计中。1.面向对象的意义。-> 将日常的的习惯思维引入到程序设计中。-> 以软件为中心构建可复用的软件系统。2.类和对象是面向对象的两个基本概念。-> 类,是指一类事物,是一个抽象的概念。-> 对象,是某个类的具体实体。-> 类是一种模型,可以创建出不同的对象实体。-> 对象实体是类模型的一个具体实例。-> 一个类可以有很多.原创 2021-07-28 23:44:00 · 290 阅读 · 2 评论 -
C++ - 函数重载
1.重载的概念同一个标识符在不同的上下文有不同的意义。例如:洗可以组词:洗碗,洗澡,洗衣服。2.函数重载-> 用同一个函数名定义不同的函数。-> 当函数名和不同参数搭配是函数的含义不同。示例:#include <stdio.h>#include <string.h>int func(int x){ return x;}int func(int a, int b){ return a + b;}int fu原创 2021-07-27 21:31:41 · 127 阅读 · 0 评论 -
C++ - 新增的类型转换
1.C方式的强制类型转换存在的问题过于粗暴:任何类型之间都可以进行转换,编译器很难判断其正确性。难于定位:在源码中无法快速定位所以使用强制类型转换的语句。#include <stdio.h>typedef void(PF)(int);struct Point{ int x; int y;};int main(){ int v = 0x12345; PF* pf = (PF*)v; char c = char(v); //C语言原创 2021-07-27 19:48:36 · 108 阅读 · 0 评论