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概述(了解) c语言在c语言的基础上添加了面向对象编程和泛型编程的支持。 02.第一个程序helloworld(掌握) #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” 在弹出的网页中选择一个虚幻引擎版本,然后点击“启动 MetaHuman Creator” 等待一段时间后,在如下页面点击选择一个人…...
物流实时数仓:数仓搭建(DWD)一
系列文章目录 物流实时数仓:采集通道搭建 物流实时数仓:数仓搭建 物流实时数仓:数仓搭建(DIM) 物流实时数仓:数仓搭建(DWD)一 文章目录 系列文章目录前言一、文件编写1.目录创建2.b…...
MATLAB安装
亲自验证有效,多谢这位网友的分享: 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 核心编译与管理
编译前的任务:认识核心与取得核心原始码 Linux 其实指的是核心。这个【核心(kernel)】是整个操作系统的最底层,他负责了整个硬件的驱动,以及提供各种系统所需的核心功能,包括防火墙机制、是否支持 LVM 或 Quota 等文件系统等等&a…...
Oracle RAC环境下redo log 文件的扩容
环境: 有一个2节点RAC每一个节点2个logfile group每一个group含2个member每一个member的大小为200M 目标:将每一个member的大小有200M扩充到1G。 先来看下redo log的配置: SQL> select * from v$log;GROUP# THREAD# SEQUENCE# …...
Java入门学习笔记一
一、Java语言环境搭建 1、JAVA语言的跨平台原理 1.1、什么是跨平台性? 跨平台就是说,同一个软件可以在不同的操作系统(例如:Windows、Linux、mad)上执行,而不需要对软件做任务处理。即通过Java语言编写的…...
分布式块存储 ZBS 的自主研发之旅|元数据管理
重点内容 元数据管理十分重要,犹如整个存储系统的“大黄页”,如果元数据操作出现性能瓶颈,将严重影响存储系统的整体性能。如何提升元数据处理速度与高可用是元数据管理的挑战之一。SmartX 分布式存储 ZBS 采用 Log Replication 的机制&…...
六大设计原则
六大设计原则 1、单一职责原则 一个类或者模块只负责完成一个职责或者功能。 2、开放封闭原则 规定软件中的对象、类、模块和函数对扩展应该是开放的,对于修改应该是封闭的。用抽象定义结构,用具体实现扩展细节。 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…...
深入理解——快速排序
目录 💡基本思想 💡基本框架 💡分割方法 ⭐Hoare版本 ⭐挖坑法 ⭐前后指针法 💡优化方法 ⭐三数取中法 ⭐小区间内使用插入排序 💡非递归实现快速排序 💡性能分析 💡基本思想 任取待排…...
【代码随想录】算法训练计划50
dp 1、123. 买卖股票的最佳时机 III 题目: 给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格。 设计一个算法来计算你所能获取的最大利润。你最多可以完成 两笔 交易。 注意:你不能同时参与多笔交易(你必须在再次购…...
【数据分享】2019-2023年我国区县逐年二手房房价数据(Excel/Shp格式)
房价是一个区域发展程度的重要体现,一个区域的房价越高通常代表这个区域越发达,对于人口的吸引力越大!因此,房价数据是我们在各项城市研究中都非常常用的数据!之前我们分享了2019—2023年我国区县逐月的二手房房价数据…...
Redis设计与实现之整数集合
目录 一、内存映射数据结构 二、整数集合 1、整数集合的应用 2、数据结构和主要操作 3、intset运行实例 创建新intset 添加新元素到 intset 添加新元素到 intset(不需要升级) 添加新元素到 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调用
讯飞星火大模型,通过websocket方式通信传递协议要求的报文,然后将流式返回的报文拼接为完整的响应内容,status2时是最后一条消息。因为是websocket方式所以是异步响应的,如果想要同步需要使用CountDownLatch控制下线程等待最后一条…...
TCP与UDP:网络世界中的“顺丰快递”与“广播电台”
随着互联网的普及,我们每天都在与网络打交道。而在这背后,数据的传输离不开TCP和UDP这两种传输协议。它们就像网络世界中的“顺丰快递”和“广播电台”,各自有着不同的工作方式和特点。让我们一起来了解一下它们吧! 一、TCP&…...
升级Xcode15,iOS17后问题解决
1、Could not build module ‘WebKit’ 报错 解决方案: 编辑文件 /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…...
龙虎榜——20250610
上证指数放量收阴线,个股多数下跌,盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型,指数短线有调整的需求,大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的:御银股份、雄帝科技 驱动…...
19c补丁后oracle属主变化,导致不能识别磁盘组
补丁后服务器重启,数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后,存在与用户组权限相关的问题。具体表现为,Oracle 实例的运行用户(oracle)和集…...
Spring Boot 实现流式响应(兼容 2.7.x)
在实际开发中,我们可能会遇到一些流式数据处理的场景,比如接收来自上游接口的 Server-Sent Events(SSE) 或 流式 JSON 内容,并将其原样中转给前端页面或客户端。这种情况下,传统的 RestTemplate 缓存机制会…...
三维GIS开发cesium智慧地铁教程(5)Cesium相机控制
一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点: 路径验证:确保相对路径.…...
vscode(仍待补充)
写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh? debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...
初学 pytest 记录
安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...
关键领域软件测试的突围之路:如何破解安全与效率的平衡难题
在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件,这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下,实现高效测试与快速迭代?这一命题正考验着…...
九天毕昇深度学习平台 | 如何安装库?
pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple --user 举个例子: 报错 ModuleNotFoundError: No module named torch 那么我需要安装 torch pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple --user pip install 库名&#x…...
JVM虚拟机:内存结构、垃圾回收、性能优化
1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...
Selenium常用函数介绍
目录 一,元素定位 1.1 cssSeector 1.2 xpath 二,操作测试对象 三,窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四,弹窗 五,等待 六,导航 七,文件上传 …...
