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

C++学习笔记01

01.C++概述(了解)

c++语言在c语言的基础上添加了面向对象编程泛型编程的支持。

02.第一个程序helloworld(掌握)

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;//标准命名空间int main()
{//cout是标准的输出流对象,打印字符串,//endl是刷新缓冲区,并换行cout << "hello world!" << endl;system("pause");return EXIT_SUCCESS;
}

03.面向对象的三大特征(了解)

封装,继承,多态

04.命名空间(重点)

1.为什么有命名空间,是因为解决多人合作时取标识符是重命名的问题

2.什么是命名空间

//命名空间
namespace A{//A是空间的名字,int a;void func(){}
}

3.命名空间的注意

注意1:命名空间只能写在全局
注意2:命名空间可以嵌套命名空间
//命名空间可以嵌套命名空间
namespace Maker
{int a;namespace B{int b;}
}
注意3:命名空间是开放,随时可以加入新成员,但是新成员只能在加入后使用
namespace Maker
{int a;namespace B{int b;}
}
namespace Maker
{int c;
}
注意4:匿名命名空间
//类似于static int d=50;
namespace
{int d = 50;
}
注意5:命名空间可以取别名
void test01()
{//			新名字    旧名字namespace nameMaker = Maker;cout << nameMaker::a << endl;
}
注意6:分文件编写代码时,如果.h中有两个命名空间,但是里面的成员函数或成员变量同名时,在.cpp中实现函数时,需要加上命名空间
test.h文件
#pragma once
#include<iostream>
using namespace std;namespace myMaker1
{void func();
}namespace myMaker2
{void func();
}test.cpp文件
#include "test.h"
void myMaker1::func()//需要在函数名前面加入确定命名空间名字
{cout << "func" << endl;
}

4.作用域运算符

用来访问某个作用域里面的成员

05.using声明和编译指令(重点)

using声明是让命名空间中某个标识符可以直接使用

namespace A
{int a = 10;int b = 20;int c = 30;
}void test01()
{//using声明是让命名空间中某个标识符可以直接使用using A::a;cout <<a << endl;//int a = 50;//注意:using声明了某个变量,在该作用域内不能定义同名的变量
}

using编译指令,让某个命名空间中的标识符都可以直接使用

namespace A
{int a = 10;int b = 20;int c = 30;
}
void test02()
{//using编译指令,让某个命名空间中的标识符都可以直接使用using namespace A;cout << a << endl;cout << b << endl;cout << c << endl;int a = 100;//为什么不会冲突//类似于命名空中的a是全局变量,这里的a的局部变量cout << "a=" << a << endl;}

06.struct类型加强(重点)

加强一:定义变量时不需要使用struct

加强二:结构体内可以写函数

07.更严格的类型转换(了解)

不能隐性的转换,必须显示的转换

08.三目运算符(了解)

c语言的三目运算符返回的是右值

C++语言的三目运算符返回的是左值,是空间

放在赋值操作符左边的是左值,放在右边的是右值

09.C/C++的const(重点)

1.C语言的const修饰的变量都有空间

2.C语言的const修饰的全局变量具有外部链接属性

3.C++语言的const修饰的变量有时有空间,有时没有空间(发生常量折叠,且没有对变量进行取址操作)

const int aa = 10;//没有内存void test01()
{//发生了常量折叠cout << "aa=" << aa << endl;//在编译阶段,编译器:cout<<"aa="<<10<<endl;//禁止优化volatile//volatile const int bb = 20;//栈区const int bb = 20;int *p = (int*)&bb;//进行了取址操作,所以有空间*p = 200;cout << "bb=" << bb << endl;//cout << "bb=" << 20 << endl;cout << "*p=" << *p << endl;cout << "a的地址=" << (int)&bb << endl;cout << "p指向的地址" << (int)p << endl;}

4.C++语言中const修饰的全局变量具有内部链接属性

extern const int c = 300;//加上extern就变为外部链接属性

5.C++编译器不能优化的情况

​ 1.不能优化自定义数据类型

​ 2.如果用变量给const修饰的局部变量赋值,那么编译器就不能优化

​ 3.编译器是在编译阶段来优化数据

6.尽量用const替代define

​ 1.define没有数据类型,const修饰的变量有数据类型,可以进行数据类型检查

#define MA 128
const short ma = 128;
void func(short a)
{cout << "func(short a)" << endl;
}void func(int a)
{cout << "func(int a)" << endl;
}
int main()
{func(ma);system("pause");return EXIT_SUCCESS;
}

​ 2.const修饰的变量有作用域,define不重视作用域,不能限定常量的使用范围

10.引用(重点难点)

1.引用是做什么:和C语言的指针一样的功能,并且使语法更加简洁

2.引用是什么:引用是给空间取别名

3.引用的语法

void func(int &a)//int &a=a;
{a = 200;
}void test02()
{int a = 10;func(a);cout << "a=" << a << endl;
}

4.引用的注意

注意1:int &b = a;这里&不是取地址操作符,是引用的标记作用
注意2:引用创建时,必须初始化。//int &pRef;err
注意3:引用一旦初始化不能改变它的指向
注意4:引用必须引用一块合法的内存空间

5.数组的引用

int main()
{int arr[] = { 1, 2, 3, 4, 5 };//第一种方法(常用)//1.定义数组类型typedef int(MY_ARR)[5];//数组类型//2.建立引用MY_ARR &arref = arr;//建立引用,int &b=a;//第二种方法(常用)//直接定义引用int(&arref2)[5] = arr;// int &b=a//第三种方法typedef int(&MY_ARR3)[5];//建立引用数组类型MY_ARR3 arref3 = arr;for (int i = 0; i < 5; i++){cout << arref[i] << endl;}cout << endl;for (int i = 0; i < 5; i++){arref2[i] = 100 + i;cout << arref2[i] << endl;}system("pause");return EXIT_SUCCESS;
}

6.引用的本质(了解)

引用的本质是编译器在内部使用常指针来实现

//发现是引用,转换为 int* const ref = &a;
void testFunc(int& ref){ref = 100; // ref是引用,转换为*ref = 100
}
int main(){int a = 10;int& aRef = a; //自动转换为int* const aRef = &a;这也能说明引用为什么必须初始化aRef = 20; //内部发现aRef是引用,自动帮我们转换为: *aRef = 20;cout << "a:" << a << endl;cout << "aRef:" << aRef << endl;testFunc(a);return EXIT_SUCCESS;
}

11.指针的引用(重点难点)

1.指针的引用是给指针变量这块空间取别名

void test01()
{char* p = "翠花";char* &p1 = p;cout << p1 << endl;
}//被调函数
void func(char* &tmp)//char* &tmp=mp;
{char *p;p=(char*)malloc(64);memset(p, 0, 64);strcpy(p, "小花");tmp = p;//省了*
}
//主调函数
void test02()
{char* mp = NULL;func(mp);//省了&cout << mp << endl;
}

12.C和C++的区别(了解)

1.C语言的结构体不能写函数,C++可以

2.结构体定义变量时,C++不需要加struct关键字

3.更加严格的类型检查

4.const修饰的变量,C++有时没有内存,C语言的都有内存

5.三目运算符返回的值不一样

6.引用和C语言的指针功能一样

相关文章:

C++学习笔记01

01.C概述&#xff08;了解&#xff09; c语言在c语言的基础上添加了面向对象编程和泛型编程的支持。 02.第一个程序helloworld&#xff08;掌握&#xff09; #define _CRT_SECURE_NO_WARNINGS #include<iostream> using namespace std;//标准命名空间int main() {//co…...

【UE5】初识MetaHuman 创建虚拟角色

步骤 在UE5工程中启用“Quixel Bridge”插件 打开“Quixel Bridge” 点击“MetaHumans-》MetaHuman Presets UE5” 点击“START MHC” 在弹出的网页中选择一个虚幻引擎版本&#xff0c;然后点击“启动 MetaHuman Creator” 等待一段时间后&#xff0c;在如下页面点击选择一个人…...

物流实时数仓:数仓搭建(DWD)一

系列文章目录 物流实时数仓&#xff1a;采集通道搭建 物流实时数仓&#xff1a;数仓搭建 物流实时数仓&#xff1a;数仓搭建&#xff08;DIM&#xff09; 物流实时数仓&#xff1a;数仓搭建&#xff08;DWD&#xff09;一 文章目录 系列文章目录前言一、文件编写1.目录创建2.b…...

MATLAB安装

亲自验证有效&#xff0c;多谢这位网友的分享&#xff1a; https://blog.csdn.net/xiajinbiaolove/article/details/88907232...

C语言——预处理详解(#define用法+注意事项)

#define 语法规定 #define定义标识符 语法: #define name stuff #define例子 #include<stdio.h> #define A 100 #define STR "abc" #define FOR for(;;)int main() {printf("%d\n", A);printf("%s\n", STR);FOR;return 0; } 运行结果…...

Linux(23):Linux 核心编译与管理

编译前的任务&#xff1a;认识核心与取得核心原始码 Linux 其实指的是核心。这个【核心(kernel)】是整个操作系统的最底层&#xff0c;他负责了整个硬件的驱动&#xff0c;以及提供各种系统所需的核心功能&#xff0c;包括防火墙机制、是否支持 LVM 或 Quota 等文件系统等等&a…...

Oracle RAC环境下redo log 文件的扩容

环境&#xff1a; 有一个2节点RAC每一个节点2个logfile group每一个group含2个member每一个member的大小为200M 目标&#xff1a;将每一个member的大小有200M扩充到1G。 先来看下redo log的配置&#xff1a; SQL> select * from v$log;GROUP# THREAD# SEQUENCE# …...

Java入门学习笔记一

一、Java语言环境搭建 1、JAVA语言的跨平台原理 1.1、什么是跨平台性&#xff1f; 跨平台就是说&#xff0c;同一个软件可以在不同的操作系统&#xff08;例如&#xff1a;Windows、Linux、mad&#xff09;上执行&#xff0c;而不需要对软件做任务处理。即通过Java语言编写的…...

分布式块存储 ZBS 的自主研发之旅|元数据管理

重点内容 元数据管理十分重要&#xff0c;犹如整个存储系统的“大黄页”&#xff0c;如果元数据操作出现性能瓶颈&#xff0c;将严重影响存储系统的整体性能。如何提升元数据处理速度与高可用是元数据管理的挑战之一。SmartX 分布式存储 ZBS 采用 Log Replication 的机制&…...

六大设计原则

六大设计原则 1、单一职责原则 一个类或者模块只负责完成一个职责或者功能。 2、开放封闭原则 规定软件中的对象、类、模块和函数对扩展应该是开放的&#xff0c;对于修改应该是封闭的。用抽象定义结构&#xff0c;用具体实现扩展细节。 3、里氏替换原则 如果S是T的子类型…...

dockerfile创建镜像 lNMP+wordpress

dockerfile创建镜像 lNMPwordpress nginx dockernginx mysql dockermysql php dockerphp nginx vim nginx.conf vim Dockerfile docker network create --subnet172.17.0.0/16 --opt "com.docker.network.bridge.name""docker1" mynetwork docker buil…...

深入理解——快速排序

目录 &#x1f4a1;基本思想 &#x1f4a1;基本框架 &#x1f4a1;分割方法 ⭐Hoare版本 ⭐挖坑法 ⭐前后指针法 &#x1f4a1;优化方法 ⭐三数取中法 ⭐小区间内使用插入排序 &#x1f4a1;非递归实现快速排序 &#x1f4a1;性能分析 &#x1f4a1;基本思想 任取待排…...

【代码随想录】算法训练计划50

dp 1、123. 买卖股票的最佳时机 III 题目&#xff1a; 给定一个数组&#xff0c;它的第 i 个元素是一支给定的股票在第 i 天的价格。 设计一个算法来计算你所能获取的最大利润。你最多可以完成 两笔 交易。 注意&#xff1a;你不能同时参与多笔交易&#xff08;你必须在再次购…...

【数据分享】2019-2023年我国区县逐年二手房房价数据(Excel/Shp格式)

房价是一个区域发展程度的重要体现&#xff0c;一个区域的房价越高通常代表这个区域越发达&#xff0c;对于人口的吸引力越大&#xff01;因此&#xff0c;房价数据是我们在各项城市研究中都非常常用的数据&#xff01;之前我们分享了2019—2023年我国区县逐月的二手房房价数据…...

Redis设计与实现之整数集合

目录 一、内存映射数据结构 二、整数集合 1、整数集合的应用 2、数据结构和主要操作 3、intset运行实例 创建新intset 添加新元素到 intset 添加新元素到 intset&#xff08;不需要升级&#xff09; 添加新元素到 intset (需要升级) 4、升级 升级实例 5、关于升级 …...

[Kubernetes]2. k8s集群中部署基于nodejs golang的项目以及Pod、Deployment详解

一. 创建k8s部署的镜像 1.部署nodejs项目 (1).上传nodejs项目到节点node1 (2).压缩nodejs项目 (3).构建nodejsDockerfile 1).创建nodejsDockerfile 具体可参考:[Docker]十.Docker Swarm讲解,在/root下创建nodejsDockerfile,具体代码如下: FROM node #把压缩文件COPY到镜像的…...

讯飞星火大模型api调用

讯飞星火大模型&#xff0c;通过websocket方式通信传递协议要求的报文&#xff0c;然后将流式返回的报文拼接为完整的响应内容&#xff0c;status2时是最后一条消息。因为是websocket方式所以是异步响应的&#xff0c;如果想要同步需要使用CountDownLatch控制下线程等待最后一条…...

TCP与UDP:网络世界中的“顺丰快递”与“广播电台”

随着互联网的普及&#xff0c;我们每天都在与网络打交道。而在这背后&#xff0c;数据的传输离不开TCP和UDP这两种传输协议。它们就像网络世界中的“顺丰快递”和“广播电台”&#xff0c;各自有着不同的工作方式和特点。让我们一起来了解一下它们吧&#xff01; 一、TCP&…...

升级Xcode15,iOS17后问题解决

1、Could not build module ‘WebKit’ 报错 解决方案&#xff1a; 编辑文件 /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS17.0.sdk/System/Library/Frameworks/WebKit.framework/Headers/WKWebsiteDataStore.h 将里面…...

RabbitMQ搭建集群环境、配置镜像集群、负载均衡

RabbitMQ集群搭建 Linux安装RabbitMQ下载安装基本操作命令开启管理界面及配置 RabbitMQ集群搭建确定rabbitmq安装目录启动第一个节点启动第二个节点停止命令创建集群查看集群集群管理 RabbitMQ镜像集群配置启用HA策略创建一个镜像队列测试镜像队列 负载均衡-HAProxy安装HAProxy…...

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…...

国防科技大学计算机基础课程笔记02信息编码

1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制&#xff0c;因此这个了16进制的数据既可以翻译成为这个机器码&#xff0c;也可以翻译成为这个国标码&#xff0c;所以这个时候很容易会出现这个歧义的情况&#xff1b; 因此&#xff0c;我们的这个国…...

TDengine 快速体验(Docker 镜像方式)

简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能&#xff0c;本节首先介绍如何通过 Docker 快速体验 TDengine&#xff0c;然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker&#xff0c;请使用 安装包的方式快…...

【WiFi帧结构】

文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成&#xff1a;MAC头部frame bodyFCS&#xff0c;其中MAC是固定格式的&#xff0c;frame body是可变长度。 MAC头部有frame control&#xff0c;duration&#xff0c;address1&#xff0c;address2&#xff0c;addre…...

Python:操作 Excel 折叠

💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...

大语言模型如何处理长文本?常用文本分割技术详解

为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...

高等数学(下)题型笔记(八)空间解析几何与向量代数

目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...

2025盘古石杯决赛【手机取证】

前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来&#xff0c;实在找不到&#xff0c;希望有大佬教一下我。 还有就会议时间&#xff0c;我感觉不是图片时间&#xff0c;因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...

【JavaSE】绘图与事件入门学习笔记

-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角&#xff0c;以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向&#xff0c;距离坐标原点x个像素;第二个是y坐标&#xff0c;表示当前位置为垂直方向&#xff0c;距离坐标原点y个像素。 坐标体系-像素 …...

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中&#xff0c;新增了一个本地验证码接口 /code&#xff0c;使用函数式路由&#xff08;RouterFunction&#xff09;和 Hutool 的 Circle…...