当前位置: 首页 > news >正文

C++(学习)2024.9.18

目录

C++基础介绍

C++特点

面向对象的三大特征

面向对象与面向过程的区别

C++拓展的非面向对象的功能

引用

引用的性质

引用的参数

指针和引用的区别

赋值

键盘输入

string字符串类

遍历方式

字符串与数字转换

函数

内联函数

函数重载overload

哑元函数

面向对象基础

类与对象

概念

类的内容


C++基础介绍

C++特点

在支持C语言的基础上,全面支持面向对象编程,编程领域广泛,功能强大,是为数不多的支持底层操作的面向对象编程语言,在面向对象的语言中执行效率极高。

面向对象的三大特征

封装        继承        多态

面向对象与面向过程的区别

        面向过程是以"怎么解决问题"为核心,这种思想关注的重点是“过程”,“过程”指的是一系列有序的步骤,只需要按照这个步骤来做,就能够得到预料的结果。这种思维方式偏向于计算机执行命令的本质,通常程序为一些有序的语句。这样的程序特点是执行效率高。适合小体量的软件项目工程,偏向性能的项目一般这样做。

        面向对象是以"谁来解决问题"为核心,关注的重点是“对象”。在计算机中,“对象”可以理解为一系列由于某种联系而聚焦在一起的数据。在编程的过程中处理对象之间的关系。这种方式更近于人类的思考方式。这种编程方式的缺点就是执行效率底,编程效率高。适合大规模的软件项目。


C++拓展的非面向对象的功能

引用

引用从一定程度上讲是指针的平替。几乎被所有的面向对象编程语言所使用。引用相当于对某一目标变量起“别名”。操作引用与操作原变量完全相同。

#include <iostream>
using namespace std;
int main()
{int a = 1;int &b = a;    // b是a的引用cout << a << " " << &a << endl; cout << b << " " << &b << endl;return 0;
}

引用的性质

1.可以改变引用的值,但是不能再次成为其他变量的引用。

2.声明引用时,必须要初始化

3.声明引用时,基本写法不能初始化为null

4.声明引用的时候,初始化的值如果是纯数值,需要使用const关键字修饰引用,表示该引用为常量引用,这样引用的值不可改变。

5.可以将变量引用的地址赋值给一个指针,此时指针指向的还是原来的变量。
6.可以使用const修饰引用,此时如果原变量的值改变,引用的值也改变。

引用的参数

写一个函数,函数有两个参数a和b,函数的功能是交换两个传入的参数原来变量的值。

    
#include <iostream>
using namespace std;
void test2(int &a,int &b)
{a = a ^ b;b = a ^ b;a = a ^ b;
}
int main()
{int a1 = 1;int b1 = 2;test2(a1,b1);cout << "a1=" << a1 << endl;cout << "b1=" << b1 << endl;return 0;
}

引用作为参数进行定义的时候,再参数传递时,是不会产生副本的,这样会提高运行效率,我们在正常的编程中,建议使用引用进行传递参数。引用形参,在不参数计算的情况下,我们建议使用const进行修饰。以达到引用的安全性。

指针和引用的区别

1.语法:
指针使用 * 来声明,例如 int* ptr。
引用使用 & 来声明,例如 int& ref。

2.初始化:
指针可以在任何时刻被重新赋值,可以指向不同的对象。
引用在初始化时必须绑定到一个对象,且不能更改为指向其他对象。

3.内存管理:
指针占用内存(存储地址),可以为 nullptr。
引用没有自己的内存地址,始终与某个对象关联。

4.解引用:
指针需要使用 * 来解引用,例如 *ptr。
引用可以直接使用,无需解引用操作。

5.适用场景:
指针适用于需要动态内存管理或数组操作的场景。
引用更适合需要传递对象而不想复制时的场景。

赋值

通常编程中使用=进行赋值操作,C++新增了以下赋值语法。(只能用于初始化)

#include <iostream>
using namespace std;
int main()
{double b = 3.14;int b1 = b;int b2(b);int b3{b};  // 升级:对数据窄化做出警告cout << b << endl;  cout << b1 << endl; cout << b2 << endl;cout << b3 << endl;return 0;
}

键盘输入

可以使用cin把用户在命令行中输入的内容赋值到变量中。cin与cout一样,都是属于头文件iostream中的标准输入输出流。

#include <iostream>
using namespace std;
int main()
{int b;cin>>b;getchar();string a;cout << "请输入一个字符串" << endl;getline(cin,a);cout << "您输入的内容是:" << endl;cout << a << endl;return 0;
}

string字符串类

        string不是C++的基本数据类型,而是C++标准库中的字符串类,使用时需要引入对应的头文件#include<string>,string在绝大多数情况下可以替代C语言中的字符串,不必担心内存是否足够和字符串长度等等,其中内部还包含了很多字符串处理函数,可以完成各种情况下的字符串处理功能。string和C语言相同,字符串编码使用ASCII编码,不支持中文处理。

#include <iostream>
using namespace std;
int main()
{string str = "helloworld";cout << str.size() << endl;cout << str.length() << endl;cout << str[1] << endl;cout << str.at(5) << endl;return 0;
}

两种方式都可以,但是在C++中更推荐使用at函数,原因是at函数更安全。但是[ ]的方式效率更高。

遍历方式

#include <iostream>
using namespace std;
int main()
{string str = "helloworld";for(int i = 0; i < str.size(); i++)    //以for循环的方式进行输出字符串{cout << str.at(i);}cout << endl;for(char i:str)      //for each的方式进行循环遍历字符串{cout << i;}return 0;
}

字符串与数字转换

#include <iostream>
#include <sstream> // 字符串流
using namespace std;
int main()
{string s = "123";
//    int i = s; 错误// string → intistringstream iss(s);int i;iss >> i;cout << i << endl;// int → string
//    string s2 = i; 错误stringstream ss;ss << i;string s2 = ss.str();cout << s2 << endl;return 0;
}

函数

内联函数

内联函数用于取代C语言中宏定义的函数,内联函数的正确使用可以提升程序的执行效率。内联函数在编译的时候,直接把函数体展开到主函数中编译。在运行期间减少调用开销。
通常将具有以下性质的函数定义为内联函数:
●代码长度5行以内
●不包含复杂的控制语句
●频繁被调用
关键字:inline

后续学习的成员函数默认添加inline修饰。但是手动添加上的inline关键字,将函数声明是否为内联函数不是我们决定的,而是编译器有自己的判断准则,我们只是给编译器提一个建议。具体是否变为内联函数,还是编译器自己决定的。

函数重载overload

C++中允许多个函数使用同一个名称,这种用法就是函数重载。函数重载要求函数名称相同,但是参数不同(类型不同或者数量不同,前后顺序不同),与返回值等其他因素无关。

#include <iostream>
using namespace std;
void print_show(int i)
{cout << "调用了int重载" << i << endl;
}
void print_show(string str)
{cout << "调用了string重载" << str << endl;
}
void print_show(float f)
{cout << "调用了float重载" << f << endl;
}
void print_show(double d)
{cout << "调用了double重载" << d << endl;
}
int main()
{print_show(11);return 0;
}

哑元函数

哑元函数的参数只有类型,没有名称,这样的参数的函数哑元函数。

#include <iostream>
using namespace std;
void print_show(int ,int)
{cout << "调用了int哑元函数1" << endl;
}
void print_show(int i)
{cout << "调用了int哑元函数2" << endl;
}
int main()
{print_show(1,1);return 0;
}

作用1:哑元函数用来区分函数重载
作用2:运算符重载中用到。


面向对象基础

类与对象

概念

类:类是一个抽象的概念,用于描述同一类对象的特点。
对象:根据类的概念所创造的实体。

必须要先写类才能创建对象。

类的内容

类中最基础的内容包括两个部分,一个是属性,一个是行为。
属性:表示一些特征项的数值,比如说:身高、体重、肤色、性别、重量、颜色、型号等等。而这些特征项的数值也被称为“成员变量”。属性一般以名词存在。
行为:表示能执行的动作,能干什么事?比如说:吃饭、睡觉、打架、打篮球。行为一般函数实现,也被称为“成员函数”。行为一般以动词存在。

成员 = 成员函数+成员变量。

相关文章:

C++(学习)2024.9.18

目录 C基础介绍 C特点 面向对象的三大特征 面向对象与面向过程的区别 C拓展的非面向对象的功能 引用 引用的性质 引用的参数 指针和引用的区别 赋值 键盘输入 string字符串类 遍历方式 字符串与数字转换 函数 内联函数 函数重载overload 哑元函数 面向对象基…...

认知小文2《成功之路:习惯、学习与实践》

内容摘要&#xff1a; 在这个充满机遇的时代&#xff0c;成功不再是偶然&#xff0c;而是可以通过培养良好习惯、持续学习和实践来实现的目标。    一、肌肉记忆&#xff1a;技能的基石 成功往往需要像运动员一样&#xff0c;通过日复一日的练习来形成肌肉记忆。无论是健身…...

【数据仓库】数据仓库层次化设计

一、基本概念 **1. RDS&#xff08;RAW DATA STORES&#xff0c;原始数据存储&#xff09;** RDS作为原始数据存储层&#xff0c;用于存储来自各种源头的未经处理的数据。这些数据可能来自企业内部的业务系统、外部数据源或各种传感器等。RDS确保原始数据的完整性和可访问性&…...

【DAY20240918】03教你轻松配置 Git 远程仓库并高效推送代码!

文章目录 前言 git diff一、远程仓库&#xff1f;1、在 Gitee 上新建仓库&#xff1a;2、Git 全局设置&#xff1a;3、添加远程仓库&#xff1a;4、推送本地代码到远程仓库&#xff1a;5、输入用户名和密码&#xff1a;6、后续推送&#xff1a; 二、全情回顾三、参考 前言 git …...

从IPC摄像机读取视频帧解码并转化为YUV数据到转化为Bitmap

前言 本文主要介绍根据IPC的RTSP视频流地址,连接摄像机,并持续读取相机视频流,进一步进行播放实时画面,或者处理视频帧,将每一帧数据转化为安卓相机同格式数据,并保存为bitmap。 示例 val rtspClientListener = object: RtspClient.RtspClientListener {override fun …...

LeetCode 面试经典 150 题回顾

目录 一、数组 / 字符串 1.合并两个有序数组 &#xff08;简单&#xff09; 2.移除元素 &#xff08;简单&#xff09; 3.删除有序数组中的重复项 &#xff08;简单&#xff09; 4.删除有序数组中的重复项 II&#xff08;中等&#xff09; 5.多数元素&#xff08;简单&am…...

【网络安全的神秘世界】渗透测试基础

&#x1f31d;博客主页&#xff1a;泥菩萨 &#x1f496;专栏&#xff1a;Linux探索之旅 | 网络安全的神秘世界 | 专接本 | 每天学会一个渗透测试工具 渗透测试基础 基于功能去进行漏洞挖掘 1、编辑器漏洞 1.1 编辑器漏洞介绍 一般企业搭建网站可能采用了通用模板&#xff…...

【重学 MySQL】二十九、函数的理解

【重学 MySQL】二十九、函数的理解 什么是函数不同 DBMS 函数的差异函数名称和参数功能实现数据类型支持性能和优化兼容性和可移植性 MySQL 的内置函数及分类单行函数多行函数&#xff08;聚合函数&#xff09;使用注意事项 什么是函数 函数&#xff08;Function&#xff09;在…...

MySQL5.7主从复制搭建-gtid方式

环境准备 1、主机名和和IP地址如下 10.0.0.51 db01.ljbb.com 10.0.0.52 db02.ljbb.com 10.0.0.53 db03.ljbb.com2、配置文件 db01 [mysqld] usermysql basedir/app/mysql datadir/data/mysql/data socket/tmp/mysql.sock server_id51 port3306 secure-file-priv/tmp autoco…...

golang学习笔记22——golang微服务中数据竞争问题及解决方案

推荐学习文档 golang应用级os框架&#xff0c;欢迎stargolang应用级os框架使用案例&#xff0c;欢迎star案例&#xff1a;基于golang开发的一款超有个性的旅游计划app经历golang实战大纲golang优秀开发常用开源库汇总想学习更多golang知识&#xff0c;这里有免费的golang学习笔…...

yolo训练出现Could not load library libcudnn_cnn_train.so.8问题及解决方法

问题场景&#xff1a; 训练yolov5或者yolov8时候会报错&#xff1a; Could not load library libcudnn_cnn_train.so.8. Error: /usr/local/cuda-12.1/lib64/libcudnn_cnn_train.so.8: uined symbol: _ZN5cudnn3cnn34layerNormFwd_execute_internal_implERKNS_7backend11Vari…...

携手科大讯飞丨云衔科技为企业提供全栈AI技术解决方案

作为智能时代的核心驱动力&#xff0c;人工智能不仅重塑了传统行业的面貌&#xff0c;更开辟了全新的经济增长点。科大讯飞以其深厚的技术底蕴和创新能力&#xff0c;持续引领着人工智能领域的发展潮流。云衔科技作为科大讯飞开放平台的AI技术产品线合作伙伴代理商&#xff0c;…...

57页PPT | 智慧文旅整体建设解决方案

主要介绍了智慧文旅的建设背景、需求分析、解决方案、应用系统功能需求、客户价值、企业价值、建设理念、建设思路、总体架构、安全管理体系、融媒体综合服务平台、大数据分析平台、智慧文旅云平台、智慧管理、智慧营销、智慧服务等方面的内容。 背景及需求分析 方案架构及理念…...

线性代数之QR分解和SVD分解

文章目录 1.QR分解Schmidt正交化Householder变换QR分解的应用 2. 求矩阵特征值、特征向量的基本方法3.SVD分解SVD分解的应用 参考文献 1.QR分解 矩阵的正交分解又称为QR分解&#xff0c;是将矩阵分解为一个正交矩阵Q和一个上三角矩阵R的乘积的形式。 任意实数方阵A&#xff0c…...

在虚拟机安装mysql数据库

一、安装步骤&#xff08;下载包-传输软件包-安装包-启用仓库-使用yum安装服务器&#xff09; 1、要在mysql官网下载yum仓库包 2、下载好rpm包后&#xff0c;将其通过xftp传输到root目录下 3、使用sudo yum install yum的仓库名&#xff08;sudo yum install mysql-community-…...

详解QT插件机制

Qt插件机制允许将功能模块化为独立的插件,从而在运行时动态加载和卸载这些模块。这种机制对于扩展应用程序、插件架构和动态功能添加非常有用 插件机制 插件的基本概念 插件: 在Qt中,插件是实现特定接口的动态库(DLL或so文件),这些接口由Qt插件框架定义。插件可以被应用程序…...

【Hot100】LeetCode—32. 最长有效括号

目录 1- 思路题目识别动态规划 2- 实现⭐32. 最长有效括号——题解思路 3- ACM 实现 原题链接&#xff1a;32. 最长有效括号 1- 思路 题目识别 识别1 &#xff1a;给定一个字符串 s &#xff0c;求解 s 中的最长有效括号 动态规划 动态规划五部曲 递推公式难如果遇到了 s.…...

力扣198-打家劫舍

你是一个专业的小偷&#xff0c;计划偷窃沿街的房屋。每间房内都藏有一定的现金&#xff0c;影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统&#xff0c;如果两间相邻的房屋在同一晚上被小偷闯入&#xff0c;系统会自动报警。 给定一个代表每个房屋存放金额的…...

Python 入门教程(4)数据类型 | 4.1、数据类型

文章目录 一、数据类型1、弱类型与强类型2、变量没有类型&#xff0c;数据有类型3、不可变类型和可变类型 前言&#xff1a; Python 是一种高级编程语言&#xff0c;以其简洁的语法、丰富的内置库和动态类型系统而闻名。在 Python 中&#xff0c;数据类型是编程的基础&#xff…...

如何进行DAP-seq的数据挖掘,筛选验证位点

从样本准备到寄送公司&#xff0c;每一天都在“祈祷”有个心仪的分析结果&#xff0c;终于在这天随着邮件提示音的响起&#xff0c;收到了分析结果...... 分析前工作 爱基在进行数据分析之前&#xff0c;会有两次质控报告反馈给老师们。第一个&#xff0c;基因组DNA的提取质控…...

学习大数据DAY56 业务理解和第一次接入

作业1 1 了解行业名词 ERP CRM OA MES WMS RPA SAAS 了解每个系统的功能和应用 ERP 系统&#xff0c;&#xff08;Enterprise Resource Planning&#xff0c;企业资源计划系统&#xff09;&#xff1a;ERP 系统 是一种用于管理企业各类资源的软件系统&#xff0c;包括生产管理…...

java线程池编程示例

程序功能 这段代码展示了如何使用 Java 线程池 来并发执行多个任务。通过创建一个固定大小为 3 的线程池&#xff0c;程序提交了 5 个任务&#xff0c;并让线程池中的线程并发处理这些任务。每个任务模拟了一个耗时操作&#xff0c;最后程序等待所有任务完成后关闭线程池。 …...

02 基于STM32的按键控制继电器驱动电机

本专栏所有源资料都免费获取&#xff0c;没有任何隐形消费。 注意事项&#xff1a;STM32仿真会存在各种各样BUG&#xff0c;且尽量按照同样仿真版本使用。本专栏所有的仿真都采用PROTEUS8.15。 本文已经配置好STM32F103C8T6系列&#xff0c;在PROTUES仿真里&#xff0c;32单片…...

网页本地存储

网页本地存储 <html> <script>//添加数据function add(){var text;textdocument.getElementById(text).value;indexlocalStorage.length1;localStorage.setItem(index,text);}//显示localStorage所有内容function showall(){storagelocalStorage;var length stor…...

SpringBoot2:web开发常用功能实现及原理解析-@ControllerAdvice实现全局异常统一处理

文章目录 前言1、工程包结构2、POM依赖3、Java代码 前言 本篇主要针对前后端分离的项目&#xff0c;做的一个统一响应包装、统一异常捕获处理。 在Spring里&#xff0c;我们可以使用ControllerAdvice来声明一些关于controller的全局性的东西&#xff0c;其用法主要有以下三点…...

DockerLinux安装DockerDocker基础

Linux软件安装 yum命令安装 通过yum命令安装软件,是直接把软件安装到Linux系统中 安装和卸载都比较麻烦,因为软件和系统是强关联的 Docker docker是一种容器技术,可以解决软件和系统强关联关系,使得软件的安装和卸载更方便,它可以将我们的应用以及依赖进行打包,制作出一个镜…...

macOS平台TensorFlow环境安装

1.安装xtarfile pip3 install xtarfile 2.安装 pip3 install matplotlib 3.安装jieba pip3 install jieba 4.安装 pip3 install tensorflow tensorflow安装成功...

全网最全 线程邮箱

线程邮箱的优缺点 优点 避免资源竞争&#xff1a;线程邮箱通过队列和互斥锁来管理线程间的通信&#xff0c;确保只有持有锁的线程可以访问和修改队列中的数据&#xff0c;从而避免了多个线程同时尝试修改同一资源时可能出现的竞争条件&#xff0c;减少了因资源竞争导致的死锁…...

Linux下rpm方式部署mysql(国产化生产环境无联网服务器部署实操)

请放心观看&#xff0c;已在正式环境部署验证&#xff0c;流程无问题&#xff01; 所用系统为国产化麒麟银河 aarch64系统&#xff0c;部署时间2024年9月份&#xff01; #查看服务器信息 #涉及生产服务器&#xff0c;所以输出信息隐藏了一部分[rootecs-xxxxx hdata]# uname -…...

【Python机器学习】NLP信息提取——正则模式

我们需要一种模式匹配算法&#xff0c;该算法可以识别与模式匹配的字符序列或词序列&#xff0c;以便从较长的文本字符串中“提取”它们。构建这种模式匹配算法的简单方法是在Python中&#xff0c;使用一系列if/else语句在字符串的逐个位置查找该符号&#xff08;单词或字符&am…...