重生之C++王者归来DAY1

c++的概述

c++的编程思想:面向对象、泛型编程。

1.第一个c++程序

本文用的是QT,VS之类的也可

2.c++面向对象的三大特性(重要)

封装:将相同属性的数据和方法封装在一起,加权限区分,用户只能借助公共方法操作 私有数
据。
继承:体现在类和类之间的关系,如果A类继承于B类,那么A类直接拥有B类的数据和方法。
多态:一个接口(函数),多种功能。

::作用域运算符

::解决归属问题(谁是谁的谁)

单独使用,可以优先使用全局变量

命名空间

使用关键字namespace, 控制标名称的作用域。
命名空间的本质:对符号常量、变量、函数、结构、枚举、类和对象等等进行封装

小结:C中说xx本质,考虑内存,C++说本质想三大特性,封装,继承,多态

创建一个命名空间

命名空间 只能定义在全局

命名空间可以嵌套

可以随时将新的成员加入命名空间

前面写了namespace A{xx},后面还可以再写一遍namespace A{}把要写的再加上

命名空间中 函数的声明和实现分开

无名命名空间
无名命名空间 只能在 本源文件使用。

namespace {int n=10}等价于 static int n=10,只能在当前文件使用

命名空间取别名

使用using申明命名空间中的某几个成员 可用

但是using 申明某个成员 容易造成名字冲突

using 申明制定成员函数 遇到函数重载

1 namespace B {
2  void fun01(void)
3  {
4  cout<<"B中的fun01 void"<<endl;
5  }
6  void fun01(int a)
7  {
8  cout<<"B中的fun01 int"<<endl;
9  }
10  void fun01(int a, int b)
11  {
12  cout<<"B中的fun01 int int"<<endl;
13  }
14 }
15 void test02()
16 {
17  //函数重载 命名空间的所有同名函数 都被申明 可用
18  using B::fun01;
19
20  fun01();
21  fun01(10);
22  fun01(10,20);
23 }

using申明整个命名空间 可以直接通过成员名 使用

加作用域解决冲突

类型增强

1、全局变量检测增强

int a;不行

2、c++的函数形参必须有类型
c语言:允许函数形参无类型(可以传任意参数)        c++不允许

3、如果函数没有参数,建议写void

4、更严格的类型转换

5、结构体类型增强

6、c++新增bool类型

bool类型拥有两个值, true false,用法 bool a=true        if(a)xxx

bool类型占一个字节,可以对其赋值tuue ,false 也可以赋值具体值,0为假其余为真,-1是真

7、三目运算符增强

返回的是引用(可以对其赋值),而c语言中返回的是值

8、左值和右值(c++ c共有)
左值:能放在=左边,(能被赋值的值 就是左值)
右值:只能放在=右边  (不能被赋值的值 就是右值)

c++的const

1、c++和c中的const都是修饰变量为 只读。
2、c语言 严格准许 const修饰的是只读变量。C语言中修饰的变量名,变量名不能改,但是,可以通过指针用*p来改

3、c++的const 会对变量 优化

        1、如果以常量 初始化const修饰的变量  编译器会将变量的值 放入符号常量表中,不会立即给变量开辟空间平替宏定义

        2、只有当对a 取地址时 编译器才会给a开辟空间(只读变量)

但是此时,a=10,用指针指向,令*p等于100会出现两个结果

3、如果以变量 初始化const修饰的只读变量,没有符号常量表,立即开辟空间

int b=10; const int a=b;现在a跟*p结果就一样了

4、如果以const修饰的是自定义类型的变量 也不会有符号常量表,立即开辟空间

 5、c++中尽量使用const代替define

1、 const有类型,可进行编译器类型安全检查。#define无类型,不可进行类型检查
2、const有作用域,而#define不重视作用域,宏不能作为命名空间、结构体、类的
成员,而const可以(宏定义不符合C++封装特性!不能作为命名空间、结构体、类的成员)

引用

1、引用的定义


引用的本质:就是给变量名取个别名。
引用定义的步骤:

        1 &别名
        2 给哪个变量取别名 就定义该变量
        3 从上往下整体替换

案例1:给普通变量取别名

案例2:给数组取别名

1 void test02()
2 {
3  int arr[5]={10,20,30,40,50};
4  int n = sizeof(arr)/sizeof(arr[0]);
5
6  int (&myArr)[5] = arr;
7  int i=0;
8  for(i=0;i<n;i++)
9  {
10  cout<<myArr[i]<<" ";
11  }
12  cout<<endl;
13 }

案例3:给指针变量取别名

案例4:给函数取别名

2、引用作为函数的参数

函数内部可以 通过 引用 操作外部变量。(节约空间)

3、引用作为函数的返回值类型(链式操作)

注意不要返回局部变量的引用,局部变量会被释放

链式操作

分析 ,ob1.printStu(ob1,100)调用函数返回值还是结构体(去了别名叫ob)返回值.printStu(xx)

4、常引用

const int &a = 10;//a就是10的别名

不能通过常引用 修改 内容。
常引用 作为函数的参数:防止函数内部修改外部的值。

5、引用的本质:常量指针

1 int a=10;
2 int &b = a;//b为a的别名 int * const b = &a;
3 b = 100;//a的值为100 *b = 100;

内联函数

内联函数:在编译阶段  将内联函数中的函数体 替换函数调用处。避免函数调用时的开销。
内联函数  必须在定义的时候 使用关键字inline修饰, 不能在声明的时候使用inline

1、宏函数和内联函数的区别(重要)

宏函数和内联函数  都会在适当的位置 进行展开  避免函数调用开销。
宏函数的参数没有类型,不能保证参数的完整性。
内联函数的参数有类型  能保证参数的完整性。
宏函数在预处理阶段展开
内联函数在编译阶段展开
宏函数没有作用域的限制,不能作为命名空间、结构体、类的成员
内联函数有作用域的限制,能作为命名空间、结构体、类的成员

2、内联函数的注意事项

在内联函数定义的时候加inline修饰
类中的成员函数 默认都是内联函数(不加inline 也是内联函数)
有时候 就算加上inline也不一定是内联函数(内联函数条件)
不能存在任何形式的循环语句
不能存在过多的条件判断语句
函数体不能过于庞大
不能对函数取地址
有时候不加inline修饰 也有可能是内联函数。
内不内联 由编译器决定。

函数重载

函数重载 是c++的多态的特性(静态多态)。
函数重载:用同一个函数名  代表不同的函数功能。

函数重载的条件

同一作用域,函数的参数类型、个数、顺序不同 都可以重载。(返回值类型不能作为重载的条
件)

c++中 不能直接将函数名作为函数的入口地址(为啥呢?)
函数名和参数 共同决定函数的入口地址

函数的缺省参数

在函数声明处 给函数参数一个默认的值,如果函数调用处,用户没用传实参,编译器就可以使用
这个默认的值。

如果函数的某个参数设置为默认参数, 那么这个参数的右边的所有参数 都必须是默认参数。

占位参数

没有形参名的形参叫占位参数        int or int=0(缺省参数做占位参数)

默认参数和函数重载同时出现 一定要注意二义性

第一个参数不知道该传给谁                                                                                                                                                                              

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

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

相关文章

PCL 高斯投影正算:大地坐标转高斯投影坐标(C++详细过程版)

目录 一、算法原理二、代码实现三、结果展示四、测试数据PCL 高斯投影正算:大地坐标转高斯投影坐标(C++详细过程版)由CSDN点云侠原创。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫。 一、算法原理 二、代码实现 头文件及读取保存函数见:

SAP同步异常2:SAP删除获利能力特征字段后VF02发货过帐报错。

测试环境VF02过帐报错&#xff0c; 原因是之前删除已经激并使用的获利能力特征字段后&#xff0c;只处理了数据库&#xff0c;没有处理程序。 处理方案&#xff1a; 1、 KEA0 维护经营关注点&#xff1a; 这里WW291已经删除&#xff0c;但没有激活程序。 退出后&#xff…

web安全学习笔记【09】——算法2

基础[1] 入门-算法逆向&散列对称非对称&JS源码逆向&AES&DES&RSA&SHA #知识点&#xff1a; 1、Web常规-系统&中间件&数据库&源码等 2、Web其他-前后端&软件&Docker&分配站等 3、Web拓展-CDN&WAF&OSS&反向&负载…

2.数据结构 顺序表(自留笔记)

文章目录 一.静态顺序表&#xff1a;长度固定二.动态顺序表1.下面证明原地扩容和异地扩容代码如下&#xff1a;2.下面是写一段Print&#xff0c;打印数字看看&#xff1a;3.头插4.尾删5.头删6.越界一定会报错吗7.下标插入8.下标删除9.查找数字10.应用&#xff1a;利用顺序表写一…

跨平台同步 Shell 历史记录,无缝切换会话 | 开源日报 No.154

atuinsh/atuin Stars: 14.3k License: MIT Atuin 是一个用 SQLite 数据库替换现有 shell 历史记录的工具&#xff0c;可以记录命令的额外上下文&#xff0c;并提供可选且完全加密的历史同步功能。其主要功能和核心优势包括&#xff1a; 重新绑定 ctrl-r 和 up (可配置) 到全屏…

安装宝塔面板后k8s所在节点pod无法正常工作解决方法,kubernetes k8s 与宝塔面板冲突解决方法

在实际项目过程中我们使用了k8s 在生产环境中运行管理服务。 但是对服务器的状态管理我们使用了宝塔面板进行 K8s 版本1.2.8 宝塔面板 版本 8.05 操作步骤是这样的。 1.完成1.2.8 k8s的节点安装&#xff0c;并正常运行服务。 过程略 2.安装宝塔面板 ​ yum install -y …

不要在细节上雕花

前段时间在网上看到一张趣图,有人在社交网络分享学习编程的笔记,一行行手抄代码,字迹清晰,排版工整,霎是认真。 这可能只是个梗,但它让我想起我的学生年代。许多年前我还在念书的时候,班上有不少非常认真的同学,热衷于把课堂笔记做得非常漂亮、工整,有些甚至要用尺子对…

vue —— h函数的学习与使用

文章目录 一、h函数是什么&#xff1f;二、h函数格式说明及使用示例1&#xff1a;简单创建一个VNode&#xff08;vue3&#xff09;示例2&#xff1a;vue2中h函数用法示例3&#xff1a;vue3中h函数的用法vue2和vue3中h函数的区别&#xff1f; 三、h函数实现原理四、h函数常用场景…

java每日一记 —— MySQL窗口函数的使用

MySQL窗口函数 1.什么时窗口函数2.窗口函数的基本应用2.1.排序函数2.2.分布函数2.3.前后函数2.4.头尾函数2.5.聚合函数2.6.其他函数 窗口函数时MySQL8.0中的 注意&#xff1a;窗口函数也有人称为“开窗函数” 1.什么时窗口函数 引入问题&#xff1a;让我们从一个实际的问题开始…

redis排序

文章目录 简介SORT命令的实现ALPHA选项的实现ASC和DESCBYLIMITGET命令 类似映射STORE选项的实现多个命令的执行顺序 简介 Redis的SORT命令可以对列表键、集合键或者有序集合键的值进行排序。 SORT命令的实现 服务器执行SORT numbers 命令的详细步骤如下&#xff1a; 1&#…

在windows安装python版本的tensorrt

文章目录 一、进入官网&#xff0c;下载tensorrt包二、下载后解压并把相应文件拷入对应cuda的文件夹2.1 拷贝头文件2.2 拷贝静态库2.3 拷贝动态库 三、安装whl文件四、验证 一、进入官网&#xff0c;下载tensorrt包 https://developer.nvidia.com/tensorrt-download 这里需要…

接口文档swagger2的使用

Spring-接口文档swagger2 1、swagger/knife4j 接口文档配置 ​ knife4j是swagger的增强版本&#xff0c;更加的小巧、轻量&#xff0c;功能也是更加的完善&#xff0c;UI也更加的清晰&#xff1b;可以从swagger到knife4j无缝切换。 1.1 引入相关依赖 <!--接口文档的开发:…

【Tailwind】各种样式的进度条

基本样式进度条&#xff1a; <div class"mb-5 h-2 rounded-full bg-gray-200"><div class"h-2 rounded-full bg-orange-500" style"width: 50%"></div> </div>带文字的进度条&#xff1a; <div class"relativ…

销售退货单单据录入的序列号当前单据类型不在允许范围内

文章目录 销售退货单单据录入的序列号当前单据类型不在允许范围内报错截图原因分析 销售退货单单据录入的序列号当前单据类型不在允许范围内 报错截图 销售退货单保存 原因分析 销售退货单序列号录入设置&#xff1a; 报错不满足条件的序列号&#xff0c;最后出库是 其他…

golang整合rabbitmq,创建交换机并绑定队列

1,如果要开发消息队列,需要创建交换机和队列,通常有2中方式创建,1种是在面板直接创建 2,第二种就是在代码中创建,这里 展示的是go语言代码中创建rabbitmq package mainimport ("fmt""log""github.com/streadway/amqp" )func main() {// 连接R…

Java 枚举和注解

一、枚举类 把具体的对象一个一个例举出来的类就称为枚举类 枚举对应英文(enumeration, 简写 enum)枚举是一组常量的集合。可以这里理解&#xff1a;枚举属于一种特殊的类&#xff0c;里面只包含一组有限的特定的对象。 1.实现方式1——自定义类实现枚举 public class Enume…

前端面试题:topK算法

当面试官问你&#xff0c;在不考虑数字越界的情况下&#xff0c;有1亿条搜索数据&#xff0c;让你从中找到前100条频率高的数据你会怎么实现&#xff1f; 当时&#xff0c;我的第一印象是把数据分组&#xff0c;分别求前多少条&#xff1f;但是没法保证每组的前100条或者多少条…

关于Linux系统的目录结构介绍常用命令介绍

目录 一. Linux系统目录结构介绍 二. 一些常用命令的介绍 1、# 与 $的区别 2、ifconfig 3、su 4、cd 5、目录查看 6、查看文件内容 7、创建目录及文件 8、复制和移动 9、其他 10、tar 11、which 12、whereis 13、find 14、chmod 三. vim的基本使用 四. SSH密…

【推荐100个unity插件之16】3D物品描边效果——Quick Outline免费插件

文章目录 前言地址介绍使用例子完结 前言 关于3D描边&#xff0c;其实之前有用shader弄过一个&#xff1a;【实现100个unity特效】shader实现3D物品闪光和描边效果 但是很遗憾的是他不支持URP项目&#xff0c;所以现在推荐这款插件&#xff0c;他能很好的支持URP&#xff0c;…

MyBatis中一级缓存是什么?SqlSession一级缓存失效的原因?如何理解一级缓存?

一级缓存是SqlSession级别的&#xff0c;通过同一个SqlSession查询的数据会被缓存&#xff0c;下次查询相同的数据&#xff0c;就 会从缓存中直接获取&#xff0c;不会从数据库重新访问 使一级缓存失效的四种情况&#xff1a; 1) 不同的SqlSession对应不同的一级缓存 2) 同一…