C++学习笔记(五)

临时对象与C++11右值引用

右值:不可取地址的值是右值。左值:可以取地址就是左值。
--------------------------------------
临时对象:
-----------------
临时对象的特性:
--------------------
系统不分配地址,在下一行就销毁了。
-------------------------------------------
临时对象的作用:
---------------------
主要为了完成数据传递的。 
----------------------------------右值引用的语法形式:
--------------------------------
类型&& 变量名 = 右值(常量)
------------------------------------------Person&& p = Stu("lisi",23,1003);
------------------------------------------------
右值引用的作用,是用来引用右值,
底层是引用右值在栈上的一个临时变量,这栈上临时变量的别名。
右值引用只能引用右值或常量,不能引用左值。-------------------------------------------------------
如果引用左值的话,请使用移动语义函数:
------------------------------------------------------
std::move(左值)
----------------------------Person&& p2 = move(p);p2.showInfo();
--------------------------------

C++11新特性:移动构造

移动构造的意义:
---------------------------------
C++11的移动构造是C++中拷贝构造一种强有力的补充
----------------------------------------------------------------语法形式:
-------------------
class 类名
{类名(类型&& other){//移动构造函数的函数体的逻辑://转移other资源的逻辑。} 
};
-------------------------------------
//拷贝构造:A(const A& other){//深拷贝:this->p = new int[1024]();memcpy(this->p,other.p,sizeof(int[1024]));cout << "A的拷贝构造" << endl;}//C++11新的移动构造:是拷贝构造强有力的补充。A(A&& other){this->p = other.p;other.p = nullptr;cout << "A的移动构造" << endl;}
------------------------------------------------------

C++11新特性:匿名函数对象Lambda表达式

Lambda表达式的整体形式:
----------------------------------[]()->返回值{lamda表达式的函数体;
};-----------------------------------#include <iostream>
#include <typeinfo>
using namespace std;
template <class T>
class A
{
private:T& _t;
public:A(const T& t): _t(t){}void operator()(const string& str)const{cout << str << endl;}
};int main()
{[](const string& str){cout << str << endl;}("Hello World!!!!");//auto关键字:编译器自动推导关键字:auto f = 10;//auto关键字,不可做为类中的属性类型,或者 函数中的形参类型。cout << typeid (f).name() << endl;auto f1 = [](){};cout << typeid (f1).name() << endl;//C++11新特性Lambda表达式与普通函数对象之间的关系:auto f2 = [](const string& str){ cout << str << endl;};//[]中括号的作用:捕获外部参数://[]中括号什么都没有,空的,代表,不捕获外部参数。//[=]中括号是等号时,代表通过拷贝复制的方式捕获外部参数。//[&]中括号是引用符时,代表通过引用的方式捕获外部参数。//()是指普通函数对象中的小括号运算符重载函数的形参列表。//{}大括号,是指普通函数对象的函数体。//使用Lambda表达式来交换两个整形变量中的值:int x = 100;int y = 200;cout << "x外部的地址:" << &x << endl;auto f3 = [=]()mutable{int temp = x;x = y;y = temp;cout << "x的λ的内部地址:" << &x << endl;};f3();//f3.operator()();cout << "x = " << x << endl;cout << "y = " << y << endl;return 0;
}
-------------------------------------使用Lambda表达式来做为比较算法的算法策略:
----------------------------------------------------------#include <iostream>
using namespace std;
//写一个通俗的算法:
template <class T, class Function>
T compair(T t1, T t2, Function f) // int (*f)(int,int)// MyGreater f;
{return f(t1,t2); //f.operator()(t1,t2);
}int main()
{cout << compair(10,15,[](int val1, int val2){return val1 < val2 ? val1 : val2;}) << endl;  //int (*)(int,int)cout << "----------------------------------" << endl;cout << compair(10,15,[](int val1, int val2){return val1 > val2 ? val1 : val2;}) << endl; //MyGreaterreturn 0;
}----------------------C++中的闭包:(了解即可)函数内部嵌套了lambda表达式
--------------------------------#include <iostream>
using namespace std;
template <class T>
auto add(T t1, T t2)->T
{return [&](T t1, T t2){return t1 + t2;}(t1,t2);
}
int main()
{cout << add(10,10) << endl;return 0;
}

C++中的异常处理机制

C++异常处理的套路:
----------------------------
1.使用throw关键字,在有可能出现异常的地方抛出异常,异常可以使用一个常量,字符串,自定义的类对象,C++标准库的异常对象。
-----------------------------------
在抛出异常过程中,如果外层嵌套函数没有处理,那么,这个抛出的异常会继续向外层抛出,直到main函数,如果main主函数也没有处理,那么程序将自动中止。
---------------------------------2.在最外层的接口中使用try{....}catch(表达式){....}语句捕获异常,并处理。
------------------------------
注意:try{....}catch(表达式){....}语句块是一个整体不能拆开。
--------------------------------------------------------------------
try{把有可能抛出异常的函数,对象,放在try语句块中,用来捕获可能出现的异常。}catch(Exception 对象)
{//在catch语句块中,进行处理。//当异常被处理后,程序继续执行。
}

C++工厂设计模式

工厂模式(多态的应用):即创建型设计模式:
----------------------------------------------
在需要创建大量对象的场景下,
使用工厂:
-----------------------
工厂设计模式包括了以下几种方式:
--------------------------------------------------
1.简单工厂:Simple Factory Method
--------------
2.静态工厂:static  Factory Method
---------------------
3.抽象工厂:Abstract Factory
---------------
工厂设计模式的意义:
-----------------------------
提高代码的维护性与可拓展性。
--------------------
在开发时,如果需要大量地创建对象时,就应该去为创建类对象去实现一个工厂类。--------------------------------------------
以上就是我们普通工厂方法的代码的实现,但是普通工厂代码还不够优秀,假设如果我们在传入字符串时,不小心手抖写错了一个字母:那和程序就会异常中止了。
-------------------------------
所以为了避免因为后期维护时,其它程序员手抖而造成空指针异常中止的问题,我们把生产方法优化为多个指定的生产方法,优化生产方法:多个工厂方法
------------------------------------
把原来的普通工厂方法中的多个分支,分别实现多个工厂生产方法:抽象工厂(Abstract Factory)-------------------------------------
不要随便去修改源代码,公司已经通过测试过的代码,所以我在一开始设计时,就应该避免后期使用时的多次修改多次测试的问题。所以就有了抽象工厂

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/794855.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

android wifi连接

记住密码&#xff0c;第二次登录不必输入。 如果使用其他方式&#xff0c;可不可以。其实就是自己选择wifi。 ******************** 我根本没办法站在更高的维度去思考整个项目&#xff0c;认知也达不到&#xff0c;我很多的事情都不知道&#xff08;信息不全&#xff09;&…

力扣经典150题第二题:移除元素

移除元素问题详解与解决方法 1. 介绍 移除元素问题是 LeetCode 经典题目之一&#xff0c;要求原地修改输入数组&#xff0c;移除所有数值等于给定值的元素&#xff0c;并返回新数组的长度。 问题描述 给你一个数组 nums 和一个值 val&#xff0c;你需要 原地 移除所有数值等…

关于阿里云中RDS数据库的CPU使用率和内存使用率的20道高级面试题2

1. 什么是RDS数据库的CPU使用率&#xff1f;如何监控和管理它&#xff1f; RDS数据库的CPU使用率指的是数据库在执行各项操作时对CPU资源的占用情况。监控和管理CPU使用率可以通过RDS管理控制台来实现。 RDS管理控制台提供了多种工具和方法来查看和监控CPU的使用情况&#xf…

使用vue计算斐波那契数列的第n项

Vue的新特性主要关注于提升性能、优化开发体验以及增加组件的灵活性和可维护性。然而&#xff0c;Vue本身并不是专门用于实现动态规划&#xff08;Dynamic Programming, DP&#xff09;的库或框架。动态规划是一种在数学、计算机科学和经济学中使用的&#xff0c;通过把原问题分…

docker安装Nexus,maven私服

文章目录 前言安装创建文件夹设置文件夹权限docker创建指令制作docker-compose.yaml文件 查看网站访问网页查看密码 前言 nexus作为私服的maven仓库&#xff0c;在企业级应用中&#xff0c;提供了依赖来源的稳定性&#xff0c;为构建庞大的微服务体系&#xff0c;打下基础 安…

vue 浅解watch cli computed props ref vue slot axios nexttick devtools说明使用

Vue.js 是一个强大的前端框架&#xff0c;它提供了很多有用的功能和工具。你提到的这些特性&#xff08;watch、cli、computed、props、ref、slot、axios、nextTick、devtools&#xff09;在 Vue 中各自扮演着不同的角色。下面我会逐一解释这些特性如何在 Vue 中使用&#xff1…

Github 2024-04-05 开源项目日报 Top10

根据Github Trendings的统计,今日(2024-04-05统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目6TypeScript项目3Vue项目2JavaScript项目1Go项目1Rust项目1Bruno: 专为API探索和测试而设计的开源IDE 创建周期:532 天开发语言:Ja…

20240405,数据类型,运算符,程序流程结构

是我深夜爆炸&#xff0c;不能再去补救C了&#xff0c;真的来不及了&#xff0c;不能再三天打鱼两天晒网了&#xff0c;真的来不及了呜呜呜呜 我实在是不知道看什么课&#xff0c;那黑马吧……MOOC的北邮的C正在进行呜呜 #include <iostream> using namespace std; int…

MySQL - 基础三

11、事务管理 CURD不加控制&#xff0c;会有什么问题&#xff1f; 当客户端A检查还有一张票时&#xff0c;将票卖掉&#xff0c;还没有执行更新数据库时&#xff0c;客户端B检查了票数&#xff0c;发现大于0&#xff0c;于是又卖了一次票。然后A将票数更新回数据库。这是就出现…

卸载Mysql方法

若因为安装失败或者其他原因&#xff0c;MySQL需要卸载重装&#xff0c;可参考以下内容。 &#xff08;1&#xff09;清空原有数据 ①通过/etc/my.cnf查看MySQL数据的存储位置 [atguiguhadoop102 software]$ sudo cat /etc/my.cnf [mysqld] datadir/var/lib/mysql ②去往…

向量数据库 | AI时代的航道灯塔

向量数据库 | AI时代的航道灯塔 什么是向量检索服务拍照搜商品 你使用过向量数据库吗&#xff1f;使用体验&#xff1f;为什么向量数据库能借由大模型引起众多关注向量数据库在当前AI热潮中是昙花一现&#xff0c;还是未来AI时代的航道灯塔&#xff1f; 今天的话题主要是讨论向…

【排列回溯】Leetcode 46. 全排列

【排列回溯】Leetcode 46. 全排列 ---------------&#x1f388;&#x1f388;题目链接&#x1f388;&#x1f388;------------------- used数组&#xff0c;其实就是记录此时temp 里都有哪些元素使用了&#xff0c;一个排列里一个元素只能使用一次。 class Solution {List&…

【HTML】CSS样式(二)

上一篇我们学习了CSS基本样式和选择器&#xff0c;相信大家对于样式的使用有了初步认知。 本篇我们继续来学习CSS中的扩展选择器及CSS继承性&#xff0c;如何使用这些扩展选择器更好的帮助我们美化页面。 下一篇我们将会学习CSS中常用的属性。 喜欢的 【点赞】【关注】【收藏】…

【数据结构与算法】探讨数据结构中的虚拟头节点

&#x1f331;博客主页&#xff1a;青竹雾色间 &#x1f331;系列专栏&#xff1a;数据结构与算法 &#x1f618;博客制作不易欢迎各位&#x1f44d;点赞⭐收藏➕关注 &#x1f331;往期博客 深入浅出&#xff1a;单链表的实现和应用 目录 前言什么是虚拟头节点&#xff1f;虚…

深入浅出 -- 系统架构之分布式CAP理论和BASE理论

科技进步离不开理论支撑&#xff0c;而当下大行其道的分布式架构&#xff0c;透过繁荣昌盛表象&#xff0c;底层同样离不开诸多分布式理论撑持。当然&#xff0c;相信诸位在学习分布式相关技术时&#xff0c;必然学到过两个分布式领域中的基础理论&#xff0c;即&#xff1a;CA…

【蓝桥杯嵌入式】RTC——实时时钟

一、RTC简介 RTC RTC—real time clock&#xff0c;实时时钟&#xff0c;主要包含日历、闹钟和自动唤醒这三部分的功能&#xff0c;其中的日历功能我们使用的最多。日历包含两个32bit的时间寄存器&#xff0c;可直接输出时分秒&#xff0c;星期、月、日、年。 从Cubemx里的配置…

糟糕,Oracle归档满RMAN进不去,CPU98%了!

&#x1f4e2;&#x1f4e2;&#x1f4e2;&#x1f4e3;&#x1f4e3;&#x1f4e3; 哈喽&#xff01;大家好&#xff0c;我是【IT邦德】&#xff0c;江湖人称jeames007&#xff0c;10余年DBA及大数据工作经验 一位上进心十足的【大数据领域博主】&#xff01;&#x1f61c;&am…

Windows 11 中Docker的安装教程

选择正确的Docker版本 在Windows上&#xff0c;你可以安装两种类型的Docker&#xff1a;Docker Desktop和Docker Toolbox。Docker Desktop是针对Windows 10 Pro、Enterprise和Education版本的&#xff0c;这些版本内置了Hyper-V虚拟化支持。对于旧版本的Windows&#xff0c;比…

代码随想录算法训练营第三十一天| 理论基础、LeetCode 455.分发饼干、376. 摆动序列、53. 最大子序和

一、理论基础 文章讲解&#xff1a;https://programmercarl.com/%E8%B4%AA%E5%BF%83%E7%AE%97%E6%B3%95%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%80.html 1.贪心的定义 贪心的本质是选择每一阶段的局部最优解&#xff0c;从而达到全局最优解。例如&#xff0c;有一堆钞票&#xff0c…

什么是Ajax?怎么使用?

​ 文章目录 一、什么是Ajax二、全局刷新和局部刷新二、Ajax中使用XMLHttpRequest对象&#xff08;Ajax核心步骤&#xff09;1、创建异步对象2、给异步对象绑定事件3、异步对象的属性 readyState 表示异步对象请求的状态变化4、初始异步请求对象5、使用异步对象发送请求6、jso…