
C++
文章平均质量分 68
张江一哥
这个作者很懒,什么都没留下…
展开
-
json字段解析--使用c++的方式
使用C++解析websocket中下发的json字段原创 2022-08-18 14:09:00 · 354 阅读 · 0 评论 -
C++知识点复习 ---- C++中的类型识别
1.类型识别在面向对象中可能出现下面的情况:(1)基类指针指向子类对象(2)基类引用成为子类对象的别名C++引入了面向对象的特性,赋值兼容性原则让以上实现完全合法,子类对象完全可以当做父类对象来使用。静态类型:变量(对象)自身的类型动态类型:指针(引用)所指向对象的实际类型void test(Base* b) { /*危险的转换方式*/ Derived* d = static_cast<Derived*>(b);}基类指针是否可以强制类型转换为子类指针取原创 2021-04-17 15:41:02 · 390 阅读 · 0 评论 -
C++知识点复习 ---- 异常处理
一.C语言中的异常处理1.异常的概念:程序在运行过程中可能产生异常异常(Exception)与Bug的区别(1) 异常是程序运行时可预料的执行分支(2)Bug是程序中的错误,是不被预期的运行方式2.异常(Exception)与Bug的对比:异常:运行时产生除0的情况需要打开的外部文件不存在数组访问时越界Bug:使用野指针堆数组使用结束后未释放选择排序无法处理长度为0 的数组3.异常处理的方式C语言经典处理方式:if…else…void func() {原创 2021-04-15 23:59:57 · 507 阅读 · 0 评论 -
C++知识点复习 ---- 单例类模板
1.单例模式(1)产生的背景需求的提出:在构造设计时,某些类在整个系统生命期中最多只能有一个对象存在(Single Instance).(2)思路如何定义一个类,使得这个类最多只能创建一个对象? 单例模式要控制类的对象数目,必须对外隐藏构造函数。设计思路:将构造函数的访问属性设置为private定义instance并初始化为NULL当需要使用对象时,访问instance的值(1)空值:创建对象,并用instance标记(2)非空值:返回instance标记的对象单例模式示例:原创 2021-04-14 20:57:40 · 318 阅读 · 0 评论 -
C++知识点复习 ---- 数组类模板
1.数据型模板参数模板参数可以是数值型参数(非类型参数)template <typename T, int N>void func(){ T a[N]; //使用模板参数定义局部数组}---->func<double, 10>();数值型模板参数的限制:变量不能作为模板参数浮点数不能作为模板参数类对象不能作为模板参数本质:模板参数是在编译阶段被处理的单元,因此,在编译阶段必须准确无误的唯一确定数据型模板参数示例:#include&l原创 2021-04-11 22:51:59 · 227 阅读 · 0 评论 -
C++知识点复习 ---- 模板相关
一. 函数模板的概念和意义1.问题引入:C++中有几种交换变量的方法? 定义宏代码块 VS 定义函数代码示例:#include <iostream>#include<string>using namespace std;#define SWAP(t,a,b) \ //定义宏do \{ \ t c = a; \ a = b; \ b原创 2021-04-11 16:41:39 · 196 阅读 · 0 评论 -
C++知识点复习 ---- 对象模型分析
1.回归本质class是一种特殊的struct:在内存中class依旧可以看做变量的集合class与struct遵循相同的内存对齐规则class中的成员函数与成员变量是分开存放的每个对象由独立的成员变量所有对象共享类中的成员函数对象内存布局示例:#include <iostream>#include <string>using namespace std;class A{ int i; int j; char c; double原创 2021-03-31 17:28:36 · 151 阅读 · 0 评论 -
C++知识点复习 ---- 多态
一. 多态的概念和意义1.函数重写回顾父类中被重写的函数依然会继承给子类子类中重写的函数将覆盖父类中的函数通过作用域分辨符(::)可以访问到父类中的函数Child c;Parent* p = &c;c.Parent::print(); //从父类中继承c.print(); //在子类中重写p->print(); //父类中定义2.多态的概念和意义面向对象中期望的行为:(1)根据实际的对象类型判断如何调用重写函数(2)父类指针(引用)指向父类对象则调用父类中定义原创 2021-03-30 22:47:03 · 206 阅读 · 0 评论 -
C++知识点复习 ---- 继承
一.继承的概念和意义1.组合关系组合关系:整体与部分的关系组合关系示例:#include <iostream>#include <string>using namespace std;class Memory{public: Memory() { cout << "Memory()" << endl; } ~Memory() { cout << "~Mem原创 2021-03-30 17:54:46 · 171 阅读 · 0 评论 -
C++知识点复习 ---- 类型转换函数
一.C语言中的类型转换1.标准数据类型之间会进行隐士的类型安全转换2.转换规则如下:二.普通类型与类类型之间转换普通类型到类类型示例:#include<iostream>#include<string>using namespace std;class Test{public: Test() { } Test(int i) { }};int main(){ Test t; //t=(Test)5;Test类中没有定义构造函数的时候报错 /原创 2021-03-24 08:23:08 · 354 阅读 · 2 评论 -
C++知识点复习 ---- 智能指针分析
一. 指针存在的问题智能指针引入为了解决的问题:内存泄漏动态申请堆空间,用完后不归还C++语言中没有垃圾回收的机制指针无法控制所指堆空间的生命周期示例:#include <iostream>#include <string>using namespace std;class Test{ int i;public: Test(int i) { this->i = i; } int value()原创 2021-03-22 15:24:27 · 211 阅读 · 0 评论 -
C++知识点复习 ---- 函数对象分析
1.客户需求编写一个函数函数可以获得斐波那契数列每项的值每调用一次返回一个值函数可根据需要重复使用for(int i = 0; i < 7; i++){cout << fib() << endl;}示例:#include<iostream>#include<string>using namespace std;int fib(){ static int a0 = 0; static int a1 = 1;原创 2021-03-17 08:12:41 · 134 阅读 · 0 评论 -
C++知识点复习 ---- C++中的字符串类
一. 历史遗留问题C语言不支持真正意义上的字符串C语言字符串数组和一组函数实现字符串操作C语言不支持自定义类型,因此无法获得字符串类型解决方案:从C到C++的进化过程引入了自定义类型在C++中可以通过类完成字符串类型的定义问题:C++中的原生类型系统是否包含字符串类型?二. 标准库中的字符串类C++语言直接支持C语言的所有概念C++语言中没有原生的字符串类型C++标准库提供了string类型(1)string直接支持字符串连接(2)string直接支持字符串的大小比较原创 2021-03-16 22:11:13 · 277 阅读 · 0 评论 -
C++知识点复习 ---- C++标准库
一. 引入重载左移操作符操作符 << 的原生意义是按位左移,例如:1 << 2;其意义是将整数1按位左移2位,即:0000 0001 --> 0000 0100重载左移操作符,将变量或常量左移到一个对象中示例:#include <stdio.h>char endl = '\n';class Console{private: /* data */public: Console& operator <原创 2021-03-15 23:16:14 · 186 阅读 · 0 评论 -
C++知识点复习 ---- 重载相关
一.函数重载函数重载的本质为相互独立的不同函数C++中通过函数名和函数参数确定函数调用无法直接通过函数名得到重载函数的入口地址函数重载必然发生在同一个作用域中二.类中的重载类中的成员函数可以进行重载构造函数的重载普通成员函数的重载静态成员函数的重载问题:全局函数,普通成员函数以及静态成员函数之间是否可以构成重载? 可以小结:类的成员函数之间可以进行重载;重载必须发生在同一个作用域中;全局函数和成员函数不能构成重载关系;//不在一个作用域重载的意义在于扩展已经存在的功能原创 2021-03-15 21:48:09 · 248 阅读 · 0 评论 -
C++知识点复习 ---- 二阶构造模式
构造函数:类的构造函数用于对象的初始化构造函数与类同名并且没有返回值构造函数在对象定义时自动被调用提出问题:1.如何判断构造函数的执行结果?2.在构造函数中执行return语句会发生什么?3.构造函数执行结束是否意味着对象构造成功?异常的构造函数:#include <iostream>using namespace std;class Test{ int mi; int mj;public: Test(int i, int j) {原创 2021-03-14 15:10:17 · 155 阅读 · 0 评论 -
C++知识点复习 ---- 类的静态成员和静态函数
新的需求:统计在程序运行期间某个类的对象数目保证程序的安全性(不能使用全局变量)随时可以获取当前对象的数目成员变量的回顾:通过对象名能够访问 public 成员变量每个对象的成员变量都是专属的成员变量不能在对象之间共享静态成员变量:在C++中可以定义静态成员变量静态成员变量属于整个类所有静态成员变量的生命期不依赖于任何对象可以通过类名直接访问公有静态成员变量所有对象共享类的静态成员变量可以通过对象名访问公有静态成员变量静态成员变量的特性:在定义时直接通过 static 关键字原创 2021-03-14 13:46:50 · 189 阅读 · 0 评论 -
C++知识点复习 ---- 对象的构造顺序和对象的析构
一.对象的构造顺序(1)局部对象的构造顺序依赖于程序的执行流(2)堆对象的构造顺序依赖于 new 的使用顺序(3)全局对象的构造顺序是不确定的二.析构函数析构函数:C++的类中可以定义一个特殊的清理函数,这个特殊的清理函数叫做析构函数析构函数的功能与构造函数相反定义:~className()析构函数的定义准则:当类中自定义了构造函数,并且构造函数中使用了系统资源,如内存申请,文件打开等,则需要自定义析构函数总结:析构函数没有参数也没有返回值类型声明析构函数在对象销毁时自动被调用析原创 2021-03-07 23:08:19 · 563 阅读 · 0 评论 -
C++知识点复习 ---- 初始化列表的使用
问题引入:类中是否可以定义const成员?下面的类定义是否合法?如果合法,ci的值是什么,存储在哪里?示例:#include <stdio.h> class Test {private: const int ci;public: Test() : ci(10) //初始化列表的使用 { //ci = 10; //只读变量不能出现在赋值符号左边 } int getCI() { return ci;原创 2021-03-07 21:33:56 · 124 阅读 · 0 评论 -
C++知识点复习 ---- 对象的构造 / 拷贝
构造函数C++中可以定义与类名相同的特殊成员函数,这种特殊的成员函数叫做构造函数。构造没有任何返回类型的声明。构造函数在对象定义时自动被调用。构造函数的调用:(1)一般情况下,构造函数在对象定义时被自动调用(2)一些特殊情况下,需要手工调用构造函数举例如下:#include <stdio.h>class Test{private: int m_value;public: Test() { printf("Test()\n");原创 2021-03-07 14:23:57 · 211 阅读 · 0 评论 -
C++知识点复习 ---- 引用
关于引用的疑问:(1)指针是一个变量值为一个内存地址,不需要初始化,可以保存不同的地址通过指针可以访问对应内存地址中的值指针可以被const修饰成常量或者只读变量(2)引用只是一个变量的新名字对引用的操作( 赋值,取地址等)都会传递到代表的变量上const引用使其代表的变量具有只读属性引用必须在定义时初始化,之后无法代表其他变量(3)从使用C++语言的角度来看引用与指针没有任何关系引用是变量的新名字,操作引用就是操作对应的变量(4)从C++编译器的角度来看为了支持新概原创 2021-03-04 22:42:56 · 140 阅读 · 0 评论 -
C++知识点复习 ---- const / volatile
C语言中的const 和 volatileconst只读变量的注意事项:A. const修饰的变量是只读的,本质还是变量B. const修饰的局部变量在栈上分配空间C. const只在编译期有用,在运行期无用说明:const修饰的变量不是真的常量,它只是告诉编译器该变量不能出现在赋值符号的左边D. const 全局变量的分歧:(1)对于 const 修饰的局部变量在栈上分配内存,其值还是可以更改的。(2)对于 const 修饰的全局变量:标准 C 语言编译器不会将 const 修饰的全局原创 2021-02-28 22:54:36 · 312 阅读 · 0 评论 -
C++知识点复习 ---- 类型转换
C方式的强制类型转换(Type)(Expression)#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); Point* p = (Point*)v; pf(5); printf("p-原创 2021-02-28 15:48:49 · 258 阅读 · 0 评论 -
C++知识点复习 ---- 动态内存分配 / 命名空间
C++中的动态内存分配:(1)C++中通过new关键字进行动态内存申请(2)C++中的动态内存申请是基于类型进行的(3)delete关键字用于内存释放变量申请:Type* pointer = new Type;//…delete pointer;数组申请:Type* pointer = new Type[N];//…delete[] pointer;示例:#include <stdio.h>int main(){ int* p = new int;原创 2021-02-27 23:49:12 · 144 阅读 · 0 评论 -
C++知识点复习 ---- 函数重载
C++知识点复习 ---- 函数重载重载 :同一个标识符在不同的上下文有不同的意义函数重载:(1)用同一个函数名定义不同的函数(2)当函数名和不同参数搭配时函数的含义不同函数重载至少满足下面的一个条件:(1)参数个数不同(2)参数类型不同(3)参数顺序不同编译器调用重载函数的准则:(1)将所有的同名函数作为候选者(2)尝试寻找可行的候选函数精确匹配实参通过默认参数能够匹配实参通过默认类型转换匹配实参(3)匹配失败的情况最终寻找到的候选函数不唯一,则出现二义性,编译失败原创 2021-02-27 22:20:55 · 267 阅读 · 0 评论