白嫖零花钱
1、微信扫码
手机端也可以点击下边链接
用手机做赏金任务
2、搜索关键词
进去搜索以下关键词,选择价格最高做即可,基本上3分钟左右就Ok了
下面都是我自己做过的。
主要是时间短、价格高,当然还有很多,大家可以自己找找。
迫于懒的原因,没找多少,都是想改善一下自己的生活的时候,才做的
序号
名称
价格
1
凹音短视频
7+
2
云闪付
15+
3
小招推客
10+
4
快步
5+
5
云缴费
5+
6
星云视界
4+
7
香蕉乐玩
12+
8
游易赚
10+
9
豆豆趣玩
7+
10
辅助注册
8+
11
哔哩哔哩
5+
12
btd
11+
13
淘宝特价版
7+
14
京东白条
20+
15
冲顶鸭
10+
16
一淘
5+
17
梨漩
7+
18
京东极速版
6+
19
聚跑
6+
20
萌犬世界
12+
21
AITD
10+
22
小蚂蚁
7+
23
陌嗨短视频
8+
24
未完
待更新。。。
Ps:也可以看网页版的,点击阅读原文即可,网页版的更新快一点。只 ...
C++的IO流
C++IO体系
ostream/istream 更好的支持自定义类型对象的流插入和流提取,自定义类型,可以自己重载,控制流提取和流插入的方式
输入输出
c输入
c++输入
12345cin >> str;year = stoi(str.substr(0, 4));mon = stoi(str.substr(4, 2));day = stoi(str.substr(6, 2));
ctrl+z+换行结束输入
为什么可以用上边循环的写法呢?是因为cin的对象可以隐式类型转换成bool(调用operator bool),在流里面读到错误或者结束标志的时候,会返回false
举例详解:
1234567891011121314151617181920212223242526class A{public: A(int a) //这里前边加上explict,下边 A aa1 = 1 代码就编不过去了 :_a(a) {} operator int() //如果这个前边加explict那么int i = aa1也不行,但是可以强转 { ...
C++类型转换
C语言中的类型转换
隐式类型转换
隐式类型转换(意义相近的类型)
1234int i = 1;// 隐式类型转换(意义相近的类型)double d = i;printf("%d, %.2f\n", i, d);
显示类型转换
显示的强制类型转换(意义不相近的类型,值转换后有意义)
1234567891011int main(){ int a = 1; int* p = &a; //int address = p; //这样没法隐式类型转换会报错 int address = (int)p; //强制类型转换没问题 printf("%x, %d\n", p, address);}
C++强制类型转换
c++也支持c的类型转换,但是c++为了加强类型转换的可视性,引入了四种命名的强制类型转换操作符
static_cast
这个就像c中的隐式类型转换,只不过显示的写了出来,static_cast用于非多态类型的转换(静态转换),编译器隐式执行的任何类型转换都可用static_cast,但它不能用于两个不相关的类型 ...
继承
继承的概念及定义
继承概念
继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保 持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。继承呈现了面向对象 程序设计的层次结构,体现了由简单到复杂的认知过程。以前我们接触的复用都是函数复用,继承是类设计层次的复用
继承定义
定义格式
继承后,父类的成员,包括成员函数和成员变量,都会变成子类的一部分。
默认继承方式
在使用继承时,可以不指定继承方式,使用关键字class时默认的继承方式是private,使用struct时,默认的继承方式是public
继承关系和访问限定符
访问限定符:
public
protected
private
继承关系
public
protected
private
私有成员的意义:不想被子类继承的成员,可以设计成私有基类中想给子类复用,但是又不想暴露直接访问的成员,就应该定义成保护
继承基类成员访问方式的变化
类成员/继承方式
public继承
protected继承
private继承
基类的public成员
派生类 ...
markdown语法
字体
斜体
两个下划线,或者两个星号
斜体
斜体
粗体
两个下划线或者两个星号
粗体
粗体
组合
三个星号,或者三个下划线,粗斜体
粗斜体
删除线
前后两个~~
删除线
下划线
下划线
区块
一个>两个>>三个>>>
1
2
3
表格
加 : 可以实现左对齐,右对齐,居中,不加默认左对齐
表头
表头
表头
单元格
单元格
单元格
单元格
单元格
单元格
mermaid
流程图
12345flowchart LRA[Hard] -->|Text| B(Round)B --> C{Decision}C -->|One| D[Result 1]C -->|Two| E[Result 2]
TD
TB
BT
RL
LR
上到下
上到下
下到上
右到左
左到右
饼图
123456pie title 为什么总是宅在家里? "喜欢宅" : 45 "天气太热" : 70 ...
特殊类设计
设计不能被拷贝的类
c++11是下边的用法,c++98就是将拷贝构造变成私有,并且只声明并不实现
12345678910class A{public: A(int val):_val(val){} A(const A& a) = delete; A& operator=(const A& a) = delete;private: int _val;};
设计只能在堆上创建的类
方案1、将析构函数私有化
12345678910111213141516class HeapOnly{public: void destroy() { delete this; }private: ~HeapOnly(){}};int main(){ HeapOnly* hp = new HeapOnly; hp->destroy(); return 0; }
方案2、构造函数私有
123456789101112131415161718class He ...
智能指针
RAII
在了解智能指针之前,我们需要先要了解RAII,那么什么是RAII呢?RAII是一种利用对象生命周期来控制程序资源(如内存、文件句柄、网络链接、互斥量等)的简单技术
具体来说,是在对象构造时获取资源,对资源的控制管理在整个对象的生命周期内都保持有效,并在对象析构时释放资源,也就是将资源的管理托管给一个对象,这有着一些好处:
不用显示释放资源
对象所需的资源在其整个生命周期内始终保持有效
RAII-引入
下边是一段异常相关的代码,main函数调用fun,fun函数先new了块空间,然后调用div函数,但是div函数如果出现除0错误,会抛出异常,直接被main函数捕获,那么fun中的delete就被跳过了。这样导致了内存泄漏问题。
12345678910111213141516171819202122232425262728293031int div(){ int a, b; cin >> a >> b; if (b == 0) throw "除0错误"; return a / b;}void fun() ...
C++异常
在我们写代码的过程中,出现错误是非常常见的事情,如何对一些异常进行合理方式的处理是非常重要的问题,c语言有c语言的方法,当然,cpp作为oop的语言当然也有它的一套体系。
C语言处理错误的方式
c错误处理方式
终止程序:比如assert,缺点:有些问题会直接退出会让用户非常难受,比如出现网络错误,我们通常希望的是告警,而不是进程退出。
返回错误码:返回错误码的方式并不直观,比如返回一个5,并不能直接知道出了什么错误,必须要查对应的的错误。
大部分情况c还是采用返回错误码的方式处理错误,部分情况使用终止进程处理特别严重的错误。
C++异常概念
异常是什么?其实是一种处理错误的方式,当一个函数遇到无法处理的错误时,就可以抛出异常,让函数可以直接或者间接的调用者去处理这个错误。
大概形式如下:
12345678910111213try { // 保护的标识代码 }catch( ExceptionName e1 ) { // catch 块 }catch( ExceptionName e2 ) { // ...
C++11(下篇)
类的新功能
默认成员函数
在以前的C++类中,有6个默认成员函数:
构造函数
析构函数
拷贝构造函数
拷贝赋值重载
取地址重载
const 取地址重载
比较重要的是前4个,后两个的用处并不大,默认的成员函数就是我们不写编译器会生成一个默认的。
在C++11中,新增了两个默认成员函数
移动构造函数
移动赋值运算符重载
针对这两个新的默认成员函数,有了新的注意事项:
1、如果没有自己实现移动构造,且没有实现析构函数、拷贝构造、拷贝赋值重载中的任何一个,那么编译器会自动生成一个默认移动构造。
让我们来看个例子:
123456789101112131415161718class Person{public: Person(const char* name = "", int age = 0) :_name(name) , _age(age) {}private: st::string _name; int _age;};int main(){ Person s1("张三", 7); Per ...
C++11(右值)
右值引用和移动语义
传统的C++语法中就有引用的语法,而C++11中新增了的右值引用语法特性,所以从现在开始我们之前学习的引用就叫做左值引用。无论左值引用还是右值引用,都是给对象取别名。
右值引入
在以前我们知道有引用的语法,我们通常叫做左值引用,那么什么是左值呢?可以看下边的几个例子
123456789101112131415161718192021int main(){ // 左值:可以取它的地址 /*int a = 10; const int b = 20; int* p = &a; *p = 100;*/ // 以下的p、b、c、*p都是左值 int* p = new int(0); int b = 1; const int c = 2; // 以下几个是对上面左值的左值引用 int*& rp = p; int& rb = b; const int& rc = c; int& pvalue = *p; double x = 1.1, y = 2.2;}
可以看到,左值,可以获取它的地址+可以对它赋值。当然定义时 ...