C++基础知识
文章平均质量分 64
C++
深海带鲤鱼
巩固知识
展开
-
C++ map用法小结
在c++中map是一种键值对容器,有几个特点map提供一对一的键值对操作,以的形式出现,,其中key是唯一的,key和value可以是任意类型,包括自定义类型map的内部为一棵红黑树,默认会对key从大到小进行排序操作。原创 2023-01-08 23:32:50 · 373 阅读 · 0 评论 -
C++学习笔记(四)回调函数的基本使用和总结
C++学习笔记(四)回调函数的基本使用和总结转载 2021-01-03 22:56:48 · 137 阅读 · 0 评论 -
C++中的类型转换
文章目录1.C++的强制类型转换2. static_cast2.1 基本数据类型的转换2.2 父类与子类类型指针转换3.dynamic_cast3.1 指针类型3.3 引用类型4.const_cast5. reinterpret_cast1.C++的强制类型转换在c语言的基础上,C++新增加了四种强制类型转换:static_cast<new_type>(expression)dynamic_cast<new_type>(expression) const_cast<n原创 2021-08-10 07:50:21 · 7111 阅读 · 2 评论 -
C++11中的std::function和std::bind
1.std:bindstd:bind是一个函数模板,可以用来绑定一切函数1.1 绑定普通成员函数,普通静态成员函数,普通模板函数例子:#include <functional>#include <iostream>#include <cstdio>void fun(int a, int b){ std::cout <<a+b<<std::endl;}int main(){ auto funBind = st原创 2021-10-05 20:13:57 · 717 阅读 · 0 评论 -
C++:std::thread
1.std::thread的用法头文件为:#include <thread>2.例子#include <thread>#include <iostream>#include <unistd.h>using namespace std;void thread_fun1(int val){ cout << "Thread::val="<<val<<endl;}class Task{public原创 2021-11-23 23:01:20 · 614 阅读 · 0 评论 -
STL-map/multimap容器
1.mapmap容器中所有的元素都是键值对,即pairpair中的第一个元素为键值,第二个元素为value所有的元素会根据元素的键值自动排序不允许容器中有重复的key值,multimap容器允许有重复的key值属于关联式容器,底层结构为二叉树1.map容器的构造与赋值构造:map<T1, T2> mp; //map默认构造函数:map(const map &mp); //拷贝构造函数赋值操作:map& operator=(const map &原创 2021-11-03 23:04:05 · 432 阅读 · 0 评论 -
c++智能指针的简单实现与改进
在c++开发中,会存在一个问题,在申请内存之后可能会忘记释放,导致内存泄漏,下面文章会从实现简单智能指针到安卓智能指针进行分析1.内存泄漏举例实例化对象指针忘记使用delete从而导致内存泄漏#include <iostream>#include <string.h>using namespace std;class Student{public: Student() { cout << "Student()" << endl;原创 2022-05-20 23:06:00 · 290 阅读 · 0 评论 -
STL总结
不知道什么时候发生的一个现象,大多数人刚开始学语言,听到C和C++给人的感觉就不好! 磊磊写了篇关于C++的见解:让迷茫的彼此,有所寄托~~~ 想专一就选C++!!! https://blog.csdn.net/cfl997/article/details/103511869 C++提高编程(模板概念内容都在这篇博客中)——(一名负责整合学习的搬运工) 主要包含: 模板(类模板与函数......转载 2021-11-04 23:15:13 · 130 阅读 · 0 评论 -
安卓轻量级智能指针
在c++智能指针的简单实现与改进中实现了简单的智能指针,但是还是存在缺陷,当多线程操作RefBase中引用的值时得到的可能不是我们想要的,这是由于对RefBase中的引用计数非原子性导致,在Android中实现了轻量级智能指针保证了对引用计数的原子性安卓源码路径:实现:注意点:__sync_fetch_and_add(&mCount, 1):对引用计数加1先用进行减1操作,使用该函数返回的是mCount被减去1之前的值,即此时mCount为0,返回值为1,会将目标对象进行删除操作,实际上还存在着问题,原创 2022-06-05 22:05:48 · 417 阅读 · 0 评论 -
C++学习笔记 第62课 单例类模板
在我们开发的过程中,有时候我们只需要创建一个对象,比如超市里的收银系统,扫描系统就可以完成任务,所以在架构设计的时候我们怎么能保证这些类在系统的生命周期只存在一个对象(Single Instance)。那么我们该如何定义一个类,使得这个类最多智能创建一个对象?这其中就用到我们的单例模式。单例模式在整个系统的运行过程中,我们要控制类的数目,必须对外隐藏构造函数思路1.将构造函数的访问属性设置为private2.定义对象instance并初始化为NULL3.当需要使用对象时,访问instance的原创 2020-11-03 00:18:46 · 113 阅读 · 0 评论 -
C++学习笔记 第59课 类模板深度刨析
多参数类模板类模板可以定义任意多个不同的类型参数,其中int对应t1,float对应t2类模板可以被特化指定类模板的特定实现部分参数类型必须显示指定根据类型参数分开实现类模板类模板的特化类型部分特化-用特定的规则约束类型参数完全特化-完全显示指定类型参数59-1.cpp#include <iostream>using namespace std;template<typename T1,typename T2>class Test{pub原创 2020-10-30 23:54:02 · 438 阅读 · 0 评论 -
C++学习笔记 第58课 类模板的概念与意义
第五十八课 类模板的概念和意义 1.思考 在C++中是否能够将泛型的思想应用于类? 2.类模板 一些类主要用于存储和组织数据元素 类中数据组织的方式和数据元素的具体类型无关 如:数组类,链表类,Stack类,Queue类,等 C++中将模板的思想应用于类,使得类的实现不关注数据元素的具体类型,而只关注类所需要实现的功能。 C++中的类模板 以相同的方式处理不同的类型 在类声明前使用template进行标识 用于说明类中使用的泛指类型T 类模板的应用 只能显示指定具体类型,无法自动推导 使用具体类型原创 2020-10-26 23:05:12 · 194 阅读 · 0 评论 -
C++学习笔记 第57课 深入理解函数模板
1.函数模板深入理解编译器从函数模板通过具体类型产生不同的函数编译器会对函数模板进行两次编译对于模板代码本身进行编译对参数替换后的代码进行编译2.注意事项:1.函数模板本身不允许隐式类型转换- 自动推导类型时,必须严格匹配- 显示类型指定时,能够进行隐式类型转换57-1.cpp#include <iostream>using namespace std;template<typename T>void Swap(T &a,T &am原创 2020-10-24 21:47:00 · 125 阅读 · 0 评论 -
C++学习笔记 第56课 函数模板的概念与意义
发散性问题:C++有多少种交换变量的方法?通过前面的学习,我们可以知道,可以使用宏代码块和函数的方法进行代码交换。#include <iostream>#include <string>using namespace std;#define SWAP(t, a, b) \do { \ t c = a; \ a = b; \ b = c; \}while(0)void Swap(int& a, int&原创 2020-08-20 19:58:13 · 135 阅读 · 0 评论 -
C++学习笔记 第55课 经典问题分析4
1.关于动态内存分配问题问题:new和malloc的区别是什么? delete和free的区别是什么?newnew关键字是C++的一部分,以具体类型为单位进行内存分配,在申请内存空间时可以进行初始化mallocmalloc是c库提供的函数,以字节为单位进行内存分配,仅根据需要申请定量的内存空间下面的结果输出什么,为什么?#include <iostream>#include <cstdlib>using namespace std;clas原创 2020-10-22 23:45:25 · 87 阅读 · 0 评论 -
C++学习笔记 第54课 被遗弃的多重基础下
1.多重继承的问题三在C++中,多重继承可能产生多个虚函数表2.实验:54-2.cpp#include <iostream>#include <string>using namespace std;class BaseA{ int ma;public: virtual void funcA() { cout << "BaseA::funcA()" << endl; }};class BaseB{原创 2020-10-18 22:05:16 · 105 阅读 · 0 评论 -
C++学习笔记 第53课 被遗弃的多重继承(上)
问题引出:在C++中是否允许一个类继承自多个类?何为多重继承呢,简单的说,多重继承就是子类有多个父类,子类继承所有父类的成员函数与成员变量,子类对象可以当做任意父类对象使用C++中的多重继承语法规则:编程实验-多重继承问题一...原创 2020-10-17 23:26:26 · 128 阅读 · 1 评论 -
C++学习笔记 第52课 C++的抽象类与接口
1.问题提出在进行面向对象分析时,我们会发现一些抽象的概念!比如矩形和圆形的可以抽象为图形,在现实生活中我们需要知道具体的图形类型才可以求面积,所以对概念上的图形求面积是没有意义的!那么Shape类真的有必要存在吗,其实这个Shape类相当于一个抽象类,那么什么是抽象类呢?2.什么是抽象类3.面向对象中的抽象类Shape是现实实际中各种图形的抽象所以程序中必须能够反映抽象的图形程序中通过抽象类表示图形的概念抽象类不能创建对象,只能用于继承4.抽象类与纯虚函数5.抽象类与纯虚函数原创 2020-10-17 10:35:18 · 145 阅读 · 0 评论 -
C++学习笔记 第51课 C++对象模型(下)
第五十一课 C++对象模型分析(下) 1.继承对象模型 在C++编译器的内部类可以理解为结构体 子类是由父类成员叠加子类新成员得到的 51-1 继承对象模型初探 #include <iostream>#include <string>using namespace std;class Demo{protected: int mi; int mj;};class Derived : public Demo{ int mk;public转载 2020-10-08 22:08:27 · 188 阅读 · 0 评论 -
C++学习笔记 第50课 c++对象模型(上)
第五十课 C++对象模型分析(上) 1.回归本质 class是一种特殊的struct 在内存中class依旧可以看做变量的集合 class与struct遵循相同的内存对齐规则 class中的成员函数与成员变量是分开存放的 每个对象由独立的成员变量 所有对象共享类中的成员函数 值得思考的问题 50-1 对象内存布局初探 #include <iostream>#include <string>using namespace std;class A{ int i;原创 2020-10-08 22:06:00 · 98 阅读 · 0 评论 -
C++学习笔记 第49课 多态的基本概念
第四十九课 多态的概念和意义 1.函数重写回顾 父类中被重写的函数依然会继承给子类 子类中重写的函数将覆盖父类中的函数 通过作用域分辨符(::)可以访问到父类中的函数 2.多态的概念和意义 面向对象中期望的行为 根据实际的对象类型盘算如何调用重写函数 父类指针(引用)指向 父类对象则调用父类中定义的函数 子类对象则调用子类中定义的重写函数 面向对象中的多态的概念 根据实际的对象类型决定函数调用的具体目标 同样的调用语句在实际运行时由多种不同的表现形态 C++语言直接支持多态的概念 通过使用vir转载 2020-10-08 21:59:04 · 727 阅读 · 0 评论 -
C++学习笔记 第48课 同名覆盖问题
编程实验子类对象的兼容性,48-1.cpp#include <iostream>using namespace std;class Parent{public: int mi = 0; void add(int i) { mi += i; } void add(int a, int b) { mi += (a + b); }};class Child : public Parent.原创 2020-10-08 21:12:15 · 166 阅读 · 0 评论 -
C++学习笔记 第47课 C++中的父子冲突
问题引出:子类中是否可以定义父类中的成员,如果可以怎么区分?如果不可以,为什么?47-1.cpp#include <iostream>using namespace std;class Parent{public: int mi; Parent() { cout << "Parent()"<<"&mi = " << &mi << endl; }};class Child :public Parent{原创 2020-10-07 17:47:29 · 232 阅读 · 0 评论 -
C++学习笔记 第43课 继承的概念与意义
第四十三课 继承的概念和意义1.思考类之间是够存在直接的关联关系?2.生活中的例子组合关系:整体与部分的关系43-1 组合关系的描述强大之处在于:描述生活中的对象—面向对象#include <iostream>#include <string>using namespace std;class Memory{public: Memory() { cout << "Memory()" << endl;转载 2020-09-13 17:18:42 · 158 阅读 · 0 评论 -
C++学习笔记 第42课 隐式类型转换(下)
第四十二课 类型转换函数(下)类类型—>其他类型1.问题类类型是否能够类型转换到普通类型?用编译器测试—可以,引入新的语法规则2.类型转换函数C++类中可以定义类型转换函数类型转换函数用于将类对象转换为其他类型语法规则:42-1 类型转换函数初探#include <iostream>#include <string>using namespace std;class Test{ int mValue;public: Test(int转载 2020-09-13 16:57:37 · 112 阅读 · 0 评论 -
C++学习笔记 第41课 类型转换函数(上)
再论类型转换标准数据类型之间会进行隐式的类型安全转换转换规则为:小的类型初始化为大类型是合法的#include <iostream>#include <string>using namespace std;int main(){ short s = 'a'; unsigned int ui = 1000; int i = -2000; double d = i; cout << "d = " <<原创 2020-09-13 11:31:17 · 162 阅读 · 0 评论 -
C++学习笔记 第40课 前置操作符和后置操作符
值得思考的问题在编译器中反汇编可知,i++和++i的汇编代码是一样的问题产生的原因:现代编译器会对代码进行优化优化会使二进制代码更加高效优化后的二进制程序丢失C/C++的原生语义不可能从编译后的二进制程序还原C/C++程序++操作符重载全局函数和成员函数都可以被重载重载前置++操作符不需要额外的参数重载后置++操作符需要一个int类型的占位参数#include <iostream>using namespace std;class Test{ int原创 2020-09-06 23:08:53 · 110 阅读 · 0 评论 -
C++学习笔记 第39课 逗号操作符的分析
1.逗号操作符用于将多个子表达式连接为一个表达式逗号表达式的值为最后一个子表达式的值逗号表达式的值为最后一个子表达式的值逗号操作符按照从左向右的方式进行计算2.逗号表达式的示例#include <iostream>#include <string>using namespace std;void func(int i){ cout << "func() : i = " << i << endl;}int m原创 2020-09-06 22:23:06 · 129 阅读 · 0 评论 -
C++学习笔记 第38课 逻辑操作符的陷阱
逻辑操作符发原生语义1.操作数只有两种值(true和false)2.逻辑表达式不用完全计算就能确定最终值3.最终结果只能是true或者false重载逻辑操作符#include <iostream>using namespace std;class Test{ int i;public: Test(int i) { this->i = i; } int Value() const { return i; }};bool operator &原创 2020-09-06 19:36:43 · 118 阅读 · 0 评论 -
C++学习笔记 第37课 智能指针分析
1.永恒的话题–内存泄漏动态申请内存空间,用完之后不归还C++语言中没有垃圾回收机制指针无法控制所指堆空间的生命周期37-1.cpp#include <iostream>using namespace std;class Test {private: int i;public: Test(int i) { this->i = i; } int getValue() { return i; }};i原创 2020-09-05 22:51:18 · 141 阅读 · 0 评论 -
C++学习笔记 第36课 经典问题解析三
问题1:关于赋值的疑问问题:什么时候重载赋值操作符?编译器会不会提供默认的赋值操作符?36-1.cpp#include <iostream>using namespace std;class Test{ int* m_pointer;public: Test() { m_pointer = NULL; } Test(int i)//Test t1 = 1; { m_pointer = new int(i); } void print() { co原创 2020-09-05 17:17:02 · 155 阅读 · 0 评论 -
C++学习笔记 第35课 函数对象分析
1.客户要求编写一个函数函数可以获得斐波那契数列每项的值每调用一次返回一个值函数可根据需要重复使用35-1.cpp#include<iostream>#include<string>using namespace std;int fib(){ static int a0 = 0; static int a1 = 1; int ret = a1; a1 = a0 + a1; a0 = ret; return ret;原创 2020-08-31 23:04:49 · 96 阅读 · 0 评论 -
C++学习笔记 第34课 数组操作符的重载
1. 重载数组访问修饰符被忽略的事实,数组访问符是C/C++中的内置操作符数组访问符的原生意义是数组访问和指针运算—访问某个元素C语言深度剖析:a[n] <–> *(a + n) <–> *(n + a) <–>n[a]2.指针与数组的复习34-2.cpp#include <iostream>#include <string>using namespace std;int main(){ int a[5] = {0};原创 2020-08-30 22:51:55 · 127 阅读 · 0 评论 -
C++学习笔记 第33课 字符串类
1.历史遗留问题C语言不支持真正意义上的字符串C语言用字符数组和一组函数实现字符串操作C语言不支持自定义类型,因此无法获得字符串类型2.解决方案从C到C++的进化过程引入了自定义类型在C++中可以通过类完成字符串类型的定义问题:C++中的原生类型系统是否包含字符串类型3.标准库中的字符串类C++语言直接支持C语言的所有概念C++语言中没有原生的字符串类型C++标准库提供了string类型string直接支持字符串连接string直接支持字符串的大小比较string直接支持子串查找原创 2020-09-03 20:46:55 · 110 阅读 · 0 评论 -
C++学习笔记 第32课 初探C++标准库
1.有趣的重载操作符<<的原生意义是按位左移,例:1<<2;其意义是将整数1按位左移2位,即:0000 0001 -> 0000 0100重载左移操作符,将变量或常量左移到一个对象中!2.重载左移操作符32.1.cpp#include <stdio.h>const char endl = '\n';class Console{public: Console& operator << (int a) { printf原创 2020-08-30 22:09:20 · 133 阅读 · 0 评论 -
C++学习笔记 第31课 完善复数类
Complex.h#pragma onceclass Complex{private: double a; double b;public: Complex(double a, double b);//这里的a不需要写成a=0.0,会重定义 int getA(); int getB(); Complex operator + (const Complex& p1); Complex operator - (const Complex& p1); Complex o原创 2020-08-30 17:58:47 · 144 阅读 · 0 评论 -
C++学习笔记 第30课 操作符重载的概念
需要解决的问题下面的复数解决方案是否可行复数的加法操作30-1.cpp#include <stdio.h>class Complex{ int a; int b;public: Complex(int a = 0, int b = 0) { this->a = a; this->b = b; } int getA() const { return a;原创 2020-08-30 13:53:36 · 103 阅读 · 0 评论 -
C++学习笔记 第29课 类中的函数重载
1.函数重载回顾函数重载的本质为相互独立的不同函数C++中通过函数名和函数参数确定函数调用无法直接通过函数名得到函数重载的入口地址函数重载发生同一个作用域内2.类中的重载构造函数的重载普通成员函数的重载静态成员函数的重载3.万变不离其宗4.类与重载的深度分析#include <stdio.h>class Test{ int i;public: Test() { printf("Test::Test()\n");原创 2020-08-30 13:07:07 · 125 阅读 · 0 评论 -
C++学习笔记 第28课 友元的尴尬能力
1.友元的概念友元是C++中的一种类,发生在函数与类之间或者类与类之间,友元关系是单向的,不能传递2.友元用法在类中以friend关键字声明友元类中的友元可以是其他类或者函数-友元不是类的一部分友元不受类中访问级别的限制友元可以直接访问具体类的所有成员3.友元的语法在类中用friend关键字对函数或者类进行声明4.友元的尴尬之处5.注意事项6.小结...原创 2020-08-30 12:20:42 · 188 阅读 · 0 评论 -
c++学习笔记 第27课 二阶构造模式
1.构造函数的回顾0关于构造函数类的构造函数用于对象的初始化构造函数与类同名并且没有返回值构造函数在对象定义时自动被调用2.问题1.如何判断构造函数的执行结果?没有办法2.在构造函数中执行return语句会发生什么?构造函数立即返回3.构造函数执行结束是否意味着对象构造成功?并不意味着构造成功3.你该知道的真相构造函数只提供自动初始化成员变量的机会不能保证初始化逻辑一定成功执行return语句后构造函数立即结束4.真相的意义构造函数能决定的只是对象的初始状态,而不是对象的诞生!原创 2020-08-30 11:05:18 · 97 阅读 · 0 评论