c++(七)

c++(七)

  • 内联函数
    • 内联函数的特点
    • 为什么要有内联函数
    • 内联函数是如何工作的呢
  • 类型转换
  • 异常处理
  • 智能指针
  • 单例模式
    • 懒汉模式
    • 饿汉模式
  • VS中数据库的相关配置

内联函数

修饰类的成员函数,关键字:inline

inline 返回值类型 函数名(参数列表)
{
;
}

内联函数的特点

<1>代码量少 3-5行
<2>频繁调用
<3>逻辑简单

为什么要有内联函数

频繁的调用一个函数时,就需要频繁的出栈、入栈,此时内存的开销就比较大

内联函数是如何工作的呢

<1>普通函数:当函数调用发生时,编译器通常会生成跳转指令,将控制权转移到函数代码所在的地方,执行
完之后又跳转到函数调用的位置
<2>内联函数:直接把调用函数的语句用函数体来代替

在这里插入图片描述
注意:
<1>是不是内联由编译器决定
<2>内联函数只是对编译器的建议

类型转换

在这里插入图片描述

异常处理

报错(语法错误、逻辑错误);
c++引入了一种异常处理的机制:
先找到可能出现异常的代码块、抛出异常、捕获异常
异常的处理机制:
exception:标准异常的基类

try
{
有可能出现异常的代码块;
throw(抛出异常);//基本数据类型、类类型
}
catch()//捕获异常
{
}

#include <iostream>
using namespace std;
double div(double a, double b)
{
	if (0 == b)
	{
		//throw -1;
		//throw "分母为0";
		//throw string("分母不能为0");
		throw exception("分母不能为0");
	}
	else
	{
		return a / b;
	}
}
int main()
{
	double a, b;
	cin >> a >> b;
	try
	{
		div(a, b);
	}
	catch (int e)
	{
		cout << "异常是:" << e << endl;
	}
	catch (const char* e)
	{
		cout << "异常是:" << e << endl;
	}
	catch (string e)
	{
		cout << "异常是:" << e << endl;
	}
	catch (exception e)
	{
		cout << "异常是:" << e.what() << endl;
	}
	return 0;
}

智能指针

解决什么问题:有时候在堆区申请的空间,自己忘记释放了
类模板

<1>自动智能指针:auto_ptr
<2>共享智能指针:shared_ptr
同时多个智能指针操作同一块的堆区空间,当所有的指针生命周期结束的时候,堆区的空间会自动释放
<3>独享智能指针:unique_ptr
同一时刻,智能有一个指针指向堆区的空间,当这个指针生命周期结束的时候,堆区的空间会自动释放
<4>弱型智能指针:
弱型智能指针不能单独使用,只能和共享智能指针配合使用,弱型智能指针生命周期结束的时候并不会影
响堆区空间的释放,只有共享智能指针的生命周期结束的时候,堆区的空间才会被释放

#include <iostream>
using namespace std;
class Demol
{
public:
	Demol(int* p = nullptr) :p(p)
	{
		cout << "Demo(int *)" << endl;
		this->p = new int;
		*(this->p) = 88;
	}
~Demol()
{
	delete p;
	cout << "~Demol()" << endl;
}
private:
	int* p;
};
int main()
{
	//Demol d;
	//Demol* p = new Demol;
	Sshared_ptr<Demol> ptr(new Demol);
	return 0;
}

单例模式

一个类只能创建一个对象
需求:

<1>构造函数只能调用一次 //打开数据库
<2>类内创建对象(静态成员变量)
<3>要访问这个对象(静态成员函数)

类的设计

1、构造函数必须私有化
2、静态的成员:保存唯一的对象
3、静态的成员函数:获取唯一的对象

在这里插入图片描述

懒汉模式

哪里需要,就在哪里创建
在这里插入图片描述
存在的问题:
在多线程中,多个线程都要获取这个单例对象
解决:线程锁

饿汉模式

不管是否使用,都准备好

在这里插入图片描述
存在的问题:
占用资源
建议:一般使用懒汉模式

VS中数据库的相关配置

<1>将这3个文件放到工程路径下
在这里插入图片描述
<2>右键项目,属性
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【C++】———list容器

前言 1.list容器简单来说其实就是之前的链表结构。 2.这里的list用的是双向带头结点的循环链表。 目录 前言 一 构造函数 1.1 list (); 1.2 list (size_type n, const value_type& val value_type() ); 1.3 list (InputIterator first, InputIterator last…

21.Redis之分布式锁

1.什么是分布式锁 在⼀个分布式的系统中, 也会涉及到多个节点访问同⼀个公共资源的情况. 此时就需要通过 锁 来做互斥控制, 避免出现类似于 "线程安全" 的问题. ⽽ java 的 synchronized 或者 C 的 std::mutex, 这样的锁都是只能在当前进程中⽣效, 在分布式的这种多…

计算机系统结构之互联网络

一、基本的单级互联网络 1、立方体单级网络 立方体单级网络的名称来源于下图所示的三维立方体结构。每个顶点&#xff08;网络的节点&#xff09;代表一个处理单元&#xff0c;共有8个处理单元&#xff0c;用zyx三位二进制编号。 Cubei函数表式相连的入端和出端的二进制编号只…

海外媒体通稿:9个极具创意的旅游业媒体推广案例分享-华媒舍

如今&#xff0c;旅游业正迅速发展&#xff0c;媒体推广成为吸引游客的关键。为了更好地展示旅游目的地&#xff0c;许多创意而富有创新的媒体推广策略应运而生。本文将介绍九个极富创意的旅游业媒体推广案例&#xff0c;为广大从业者带来灵感和借鉴。 1. 视频系列&#xff1a;…

Hadoop3:MapReduce的序列化和反序列化

一、概念 1、序列化 就是把内存中的对象&#xff0c;转换成字节序列 &#xff08;或其他数据传输协议&#xff09;以便于存储到磁 盘&#xff08;持久化&#xff09;和网络传输。 2、反序列化 就是将收到字节序列&#xff08;或其他数据传输协议&#xff09;或者是磁盘的持…

services层和controller层

services层 我的理解&#xff0c;services层是编写逻辑代码语句最多的一个层&#xff0c;非常重要&#xff0c;在实际的项目中&#xff0c;负责调用Dao层中的mybatis&#xff0c;在我的项目中它调用的是这两个文件 举例代码如下 package com.example.sfdeliverysystem.servic…

华东师范大学研究团队《Ecology Letters 》揭示植物如何改变其物候以响应全球变化

自工业革命以来&#xff0c;人类活动导致多种环境因子同时发生变化&#xff0c;包括气候变暖、降水模式改变、氮沉降增加和大气CO2升高。这些变化预计会影响植物生命周期事件的季节时序—植物物候&#xff08;Nature Reviews Earth & Environment | 傅伯杰院士团队发文阐述…

基于java的CRM客户关系管理系统(二)

目录 第二章 相关技术介绍 2.1 后台介绍 2.1.1 B/S平台模式 2.1.2 MVC 2.1.3 Spring 2.1.4 Hibernate 2.1.5 Struts 2.2 前端介绍 2.2.1 JSP网页技术 2.3 开发工具 2.4 本章小结 前面内容请移步 基于java的CRM客户关系管理系统&#xff08;二&#xff09; 资源…

机器学习第四十一周周报 JTFT

文章目录 week41 JTFT摘要Abstract1. 题目2. Abstract3. 网络架构3.1 JTFT3.2 具有可学习频率的稀疏FD表示3.3 用于提取跨渠道依赖关系的低阶注意力层 4. 文献解读4.1 Introduction4.2 创新点4.3 实验过程 5. 结论小结参考文献 week41 JTFT 摘要 本周阅读了题为A Joint Time-…

【TIPs】 Visual Stadio 2019 中本地误使用“git的重置 - 删除更改 -- hard”后,如何恢复?

环境&#xff1a; VS 2019Windows10本地版本管理&#xff08;非远程&#xff09; 前言&#xff1a; git 在Visual Stadio 2019中集成了git的版本管理&#xff0c;在本地用来做版本管理&#xff0c;本来比较好用。 不过有一次&#xff0c;由于拿最初始的版本的时候&#xf…

fyne apptab布局

fyne apptab布局 AppTabs 容器允许用户在不同的内容面板之间切换。标签要么只是文本&#xff0c;要么是文本和一个图标。建议不要混合一些有图标的标签和一些没有图标的标签。 package mainimport ("fyne.io/fyne/v2/app""fyne.io/fyne/v2/container"//&…

广告变现是什么

广告变现是指媒体或平台通过向用户展示广告主的广告&#xff0c;从而获得收入的过程。 广告变现就像是一个店主&#xff0c;他需要有一个吸引人的店面&#xff0c;提供优质的内容和服务&#xff0c;然后在店里摆放一些别人的商品或服务&#xff0c;每当有客人看了或买了这…

Proxmox 虚拟环境下1Panel Linux 服务器运维管理面板的安装

简介 以前安装服务器管理面板用的都是宝塔&#xff0c;今天发现 1Panel Linux 服务器运维管理面板也很好&#xff0c;面板清晰整洁&#xff0c;使用的技术比较先进&#xff0c;所以我决定亲自安装一下看看效果就竟如何&#xff1f; 1Panel Linux 服务器运维管理面板是一个开源…

C语言 | Leetcode C语言题解之第125题验证回文串

题目&#xff1a; 题解&#xff1a; bool isalumn(char c) {return (c > a && c < z) || (c > A && c < Z) || (c > 0 && c < 9); }bool isPalindrome(char* s) {for (int left 0, right strlen(s) - 1; left < right; left, …

XDMA原理及其应用和发展

XDMA原理 XDMA的主要原理是通过直接访问主机内存&#xff0c;实现数据的快速传输。在传统的DMA&#xff08;Direct Memory Access&#xff09;技术中&#xff0c;数据传输需要经过CPU的干预&#xff0c;而XDMA可以绕过CPU&#xff0c;直接将数据从外设读取到主机内存或者从主机…

Java | Leetcode Java题解之第126题单词接龙II

题目&#xff1a; 题解&#xff1a; class Solution {public List<List<String>> findLadders(String beginWord, String endWord, List<String> wordList) {List<List<String>> res new ArrayList<>();// 因为需要快速判断扩展出的单词…

7-zip安装教程

一、简介 7-Zip 是一款开源的文件压缩软件&#xff0c;由 Igor Pavlov 开发。它具有高压缩比、支持多种格式、跨平台等特点。使用 C语言编写&#xff0c;其代码在 Github 上开源。 7-Zip的官网&#xff1a; 7-Zip 7-zip官方中文网站&#xff1a; 7-Zip 官方中文网站 7-Zip 的 G…

Java | Leetcode Java题解之第125题验证回文串

题目&#xff1a; 题解&#xff1a; class Solution {public boolean isPalindrome(String s) {int n s.length();int left 0, right n - 1;while (left < right) {while (left < right && !Character.isLetterOrDigit(s.charAt(left))) {left;}while (left …

Java筑基-集合[Set、Map、List、Stack、Queue]

这里写目录标题 一、Collection接口结构图二、Set集合1、常用方法 三、List集合1、List集合常用方法2、代码案例 四、Stack集合1、方法2、代码展示 五、Queue集合1、常用的方法2、代码展示 六、Map集合1、基本概念2、常用方法3、代码展示 一、Collection接口结构图 二、Set集合…

C语言中 printf函数格式化输出

一. 简介 本文来简单学习一下&#xff0c;C语言中printf函数格式化输出时&#xff0c;因为我们的粗心没有 将数据类型与格式化参数对应&#xff0c;而导致的一些问题。 二. C语言中printf函数的格式化输出 在C语言中&#xff0c;printf函数是用于格式化输出的函数&#xff0…