C++(入门1)

C++参考文档

Reference - C++ Reference

C++ 参考手册 - cppreference.com

cppreference.com

第一个C++程序

#include<stdio.h>
int main() {printf("Hello C++\n");return 0;
}

由上述代码可知C++是兼容C语言

第一个C++标准程序

#include<iostream>
using namespace std;
int main() {cout << "Helloc C++" << endl;return 0;
}

namespace命名空间

价值存在

在C/C++中,变量、函数和后⾯要学到的类都是⼤量存在的,这些变量、函数和类的名称将都存在于全局作⽤域中,可能会导致很多冲突。使⽤命名空间的⽬的是对标识符的名称进⾏本地化,以避免命名 冲突或名字污染,namespace关键字的出现就是针对这种问题的。 c语⾔项⽬类似下⾯程序这样的命名冲突是普遍存在的问题,C++引⼊namespace就是为了更好的解决 这样的问题

eg:我们知道rand是stdlib.h库中的一个函数,现在我们把他作为变量名。

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
int rand = 10;
int main() {printf("%d",rand);return 0;
}

运行结果发现出现错误

这时我们用namespace,把该变量隔离就可以完美解决

namespaces定义

定义命名空间,需要使⽤到namespace关键字,后⾯跟命名空间的名字,然后接⼀对{}即可,{}中 即为命名空间的成员。命名空间中可以定义变量/函数/类型等。

namespace本质是定义出⼀个域,这个域跟全局域各⾃独⽴,不同的域可以定义同名变量,所以下 ⾯的rand不在冲突了。

C++中域有函数局部域,全局域,命名空间域,类域;域影响的是编译时语法查找⼀个变量/函数/ 类型出处(声明或定义)的逻辑,所有有了域隔离,名字冲突就解决了。局部域和全局域除了会影响 编译查找逻辑,还会影响变量的⽣命周期,命名空间域和类域不影响变量⽣命周期。

namespace只能定义在全局,当然他还可以嵌套定义。
项⽬⼯程中多⽂件中定义的同名namespace会认为是⼀个namespace,不会冲突。

C++标准库都放在⼀个叫std(standard)的命名空间中。

但打印结果并不是我们想要的,也就是打印的rand打印的就是stdlib.h中的rand,我们换成打印地址。

验证结果就是一个地址,也就是存在stdlib.h中的地址

那么我们如何访问rand=10 10这个变量呢?

首先介绍一个操作符::

::域作用限定符

::默认去全局查找变量

std::默认去std域中去查找

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
namespace std {int rand = 10;
}
int main() {printf("%p\n",rand);printf("%d", std::rand);return 0;
}

完美解决。

namespace嵌套使用

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
namespace std {namespace a1 {int Add(int x, int y) {return x + y;}}namespace a2 {int Add(int x, int y) {return (x + y) * 10;}}
}
int main() {printf("%d\n", std::a1::Add(2,2));printf("%d\n", std::a2::Add(2,2));return 0;
}

运行结果

通过这个代码可以更让我们知道namespace存在的价值,假设在工作多人开发一个项目,写的函数相似,但函数返回值不同,那么就可可以用这种话隔离的方式,分别调用。

C++标准库都放在⼀个叫std(standard)的命名空间中。

命名空间使用

编译查找⼀个变量的声明/定义时,默认只会在局部或者全局查找,不会到命名空间⾥⾯去查找。所以 下⾯程序会编译报错。所以我们要使⽤命名空间中定义的变量/函数,有三种⽅式:

1.指定命名空间访问,项⽬中推荐这种⽅式。

就是我们上述写的在每次使用加上  名字::变量  

2.using将命名空间中某个成员展开,项⽬中经常访问的不存在冲突的成员推荐这种⽅式。\

using lph::a

3.展开命名空间中全部成员,项⽬不推荐,冲突⻛险很⼤,⽇常⼩练习程序为了⽅便推荐使⽤。

usinng展开直接使用:

不用using

用using

using namespace std:也就是把c++标准库中的函数全部展开。

C++输⼊&输出

• <iostream>是 Input Output Stream 的缩写,是标准的输⼊、输出流库,定义了标准的输⼊、输 出对象。

• std::cin 是 istream 类的对象,它主要⾯向窄字符(narrow characters (of type char))的标准输 ⼊流。 • std::cout 是 ostream 类的对象,它主要⾯向窄字符的标准输出流。

• std::endl 是⼀个函数,流插⼊输出时,相当于插⼊⼀个换⾏字符加刷新缓冲区

• <<是插入,>>是流提取运算符。(C语⾔还⽤这两个运算符做位运算左移/右移)

• 使⽤C++输⼊输出更⽅便,不需要像printf/scanf输⼊输出时那样,需要⼿动指定格式,C++的输⼊ 输出可以⾃动识别变量类型(本质是通过函数重载实现的,这个以后会讲到),其实最重要的是 C++的流能更好的⽀持⾃定义类型对象的输⼊输出。

• IO流涉及类和对象,运算符重载、继承等很多⾯向对象的知识,这些知识我们还没有讲解,后⾯我会有专⻔的⼀个章节来细节IO流库。

• cout/cin/endl等都属于C++标准库,C++标准库都放在⼀个叫std(standard)的命名空间中,所以要 通过命名空间的使⽤⽅式去⽤他们。

• ⼀般⽇常练习中我们可以using namespace std,实际项⽬开发中不建议using namespace std。 • 这⾥我们没有包含,也可以使⽤printf和scanf,在包含间接包含了。vs系列 编译器是这样的,其他编译器可能会报错。

缺省参数

• 缺省参数是声明或定义函数时为函数的参数指定⼀个缺省值。在调⽤该函数时,如果没有指定实参 则采⽤该形参的缺省值,否则使⽤指定的实参,缺省参数分为全缺省和半缺省参数。(有些地⽅把 缺省参数也叫默认参数)

如下如图所示10就是缺省值,第一个函数调用空参,使用缺省值,第二个函数调用,使用实参。

#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
using namespace std;
//确省参数
void Fun(int a=10) {cout << a << endl;
}
int main() {Fun();Fun(20);return 0;
}

• 全缺省就是全部形参给缺省值,半缺省就是部分形参给缺省值。C++规定半缺省参数必须从右往左 依次连续缺省,不能间隔跳跃给缺省值。

半缺省:

void Fun(int a, int b = 10, int c = 30) {cout << a << " " << b << " " << c << endl;
}
int main() {Fun(1);Fun(1, 2);Fun(1,2, 3);return 0;
}

全缺省:

void Fun(int a=5, int b = 10, int c = 30) {cout << a << " " << b << " " << c << endl;
}
int main() {Fun();Fun(1);Fun(1, 2);Fun(1,2, 3);return 0;
}

• 带缺省参数的函数调⽤,C++规定必须从左到右依次给实参,不能跳跃给实参。

• 函数声明和定义分离时,缺省参数不能在函数声明和定义中同时出现,规定必须函数声明给缺省 值。

函数重载

C++⽀持在同⼀作⽤域中出现同名函数,但是要求这些同名函数的形参不同(个数不同i或则类型不同)。这样C++函数调⽤就表现出了多态⾏为,使⽤更灵活。C语⾔是不⽀持同⼀作⽤域中出现同 名函数的,不同类型返回值不构成函数重载。

eg:

参数类型不同

#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
using namespace std;
//参数类型不同
void Add(int a, int b) {cout << "Add(int a, int b)" << endl;
}
void Add(double a, double b) {cout << "Add(double a, double b)" << endl;
}
int main() {//整形Add(1,1);//double型Add(1.1,1.2);return 0;
}

参数个数不同,调用函数也不同

#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
using namespace std;
//参数类型不同
void Add() {cout << "Add()" << endl;
}
void Add(int a) {cout << "Add(int a)" << endl;
}
void Add(int a, int b) {cout << "Add(int a, int b)" << endl;
}
int main() {Add();Add(1);Add(1,2);return 0;
}

入门2:CSDN

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【机器学习】智驭未来:机器学习如何重塑制造业的转型与升级

&#x1f4dd;个人主页&#x1f339;&#xff1a;Eternity._ &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; ❀目录 &#x1f50d;1. 引言&#x1f4d2;2. 机器学习重塑制造业生产流程&#x1f338;预测性维护&#xff1a;减少停机时间&#xff0c;提高设…

C语言日常练习Day13

目录 一、设半径r1.5&#xff0c;圆柱高h3&#xff0c;求圆周长、圆面积、圆球表面积、圆球体积、圆柱体积 二、编写程序&#xff0c;用getchar函数读入两个字符给c1,c2&#xff0c;然后分别用putchar函数和printf函数输出这两个字符 三、输入4个整数&#xff0c;要求按由小…

OD C卷 - 体育场找座位

体育场找座位 &#xff08;100&#xff09; 体育场有一排座位&#xff08;已有落座观众&#xff09;&#xff0c;观众之间必须至少一个空位才允许落座&#xff1b;在不移动现有观众座位的情况下&#xff0c;最多还能坐下多少人&#xff1f; 输入描述&#xff1a; 数组表示每个…

RHCE之seLinux和防火墙

目录 SELinux: SELinux工作原理&#xff1a; 常用的SELinux的几种文件类型&#xff1a; 1、文件类型&#xff08;file type&#xff09;&#xff1a;用于限制文件的访问。 2、进程类型&#xff08;process type&#xff09;&#xff1a;用于限制进程的行为。常见的类型包括…

测试面试宝典(三十二)—— 你是怎么测试接口的?

首先&#xff0c;在测试接口之前&#xff0c;我会仔细分析接口的需求文档和技术规格&#xff0c;明确接口的功能、输入输出参数、预期的返回结果以及可能的异常情况。 然后&#xff0c;我会使用工具如 Postman 或 Jmeter 来发送请求对接口进行测试。对于常见的 HTTP 接口&…

实现共模噪声电流相互抵消的方法

共模传导路径中噪声电流相互抵消&#xff0c;从而使总的共模电流减小&#xff0c; 终达到降噪的目的。目前为实现共模噪声电流相互抵消&#xff0c;主要是采用动点电容抵消法。 动点电容抵消法原理 动点电容抵消法就是选取合适的动点&#xff0c;添加原副边跨接电容&#xff0c…

如何判断应该设计类、子类、抽象类或接口?

如何判断应该设计类、子类、抽象类或接口&#xff1f; 1、设计新类1.1 原则1.2 解释1.3 示例 2、设计子类2.1 原则2.2 解释2.3 示例 3、设计抽象类额3.1 原则3.2 解释3.3 示例 4、设计接口4.1 原则4.2 解释4.3 示例 来源&#xff1a;《Head First Java》第二版&#xff1a;227 …

tof系统标定流程之四相位深度计算详解

1、芯片介绍 S5K33DX是一款高度集成的间接飞行时间(tof)传感器,旨在实现3d深度传感。S5K33DX具有VGA分辨率和7um像素。相机集成在tof系统中,该tof系统还包括由S5K33DX控制的红外(IR)波段调制光源。S5K33DX芯片包括解调tof像素阵列、模拟/混合信号处理电路,包括调制信号生…

黑马头条Day10-定时计算热点文章、xxl-job

一、今日内容 1. 需求分析 目前实现的思路&#xff1a;从数据库直接按照发布时间倒序查询 问题&#xff1a; 如果访问量比较大&#xff0c;直接查询数据库&#xff0c;压力较大新发布的文章会展示在前面&#xff0c;并不是热点文章 2. 实现思路 解决方案&#xff1a;把热点…

关于三星机玩游戏长时间不操作锁屏的解决办法

com.samsung.android.game.gametools 三星游戏助推器 主版机 问题描述&#xff1a; 在玩游戏是长时间不点击就会出现屏幕锁 经过测试抓取发现是三星的应用 三星系统的应用:三星游戏助推器 解决方案&#xff1a; 通过ADB命令停用系统应用 直接在adb命令中输入 adb shell pm di…

CCS(Code Composer Studio 10.4.0)编译软件中文乱码怎么解决

如果是所有文件都出现了中文乱码这时建议直接在窗口首选项中修改&#xff1a;选择"Window" -> "Preferences"&#xff0c;找到"General" -> "Workspace"&#xff0c;将"Text file encoding"选项设置为"Other&quo…

深度解析Linux-C——函数和内存管理

目录 函数指针&#xff1a; 指针函数&#xff1a; 参数为指针的函数&#xff1a; 参数为数组的函数&#xff1a; C语言内存管理 stdlib.h头文件常用函数介绍 1、局部变量 2、全局变量 3、 堆空间变量 4、静态变量 5、常量 函数指针&#xff1a; 指向函数的指针&#…

Linux文件与相关函数的知识点3

main函数参数 int main(int argc,char *argv[]) { return 0; } C语言规定了main函数的参数只能有两个&#xff0c;一个是argc,一个是argv并且&#xff0c;argc只能是整数&#xff0c;第二个必须是指向字符 串的指针数组。 argc: 参数表示命令行中参数的个数&#xff0…

Java实现七大排序(二)

一.交换排序 1.冒泡排序 这个太经典了&#xff0c;每个学编程都绕不开的。原理跟选择排序差不多&#xff0c;不过冒泡排序是直接交换。 public static void bubbleSort(int[] array){for (int i 0; i < array.length - 1; i) {for (int j 0; j < array.length-1-i; j…

域内攻击手法——AS-REP Roasting攻击和Kerberoasting攻击

一、AS-REP Roasting攻击 1、AS-REP Roasting攻击原理 AS-REP Roasting是一种对用户账户进行离线爆破的攻击方式。但是该攻击方式使用上比较受限&#xff0c;因为其需要用户账户设置不要求Kerberos 预身份验证选项&#xff0c;而该选项默认是没有勾选的。Kerberos 预身份验证…

20240727 每日AI必读资讯

&#x1f310;OpenAI向Google宣战&#xff0c;重磅推出AI搜索引擎SearchGPT &#xff01; - 将 AI 与实时网络信息结合 提供生成式UI结果 - SearchGPT 结合网络最新信息可以直接回答问题&#xff0c;同时注明相关来源链接。 - 还可以像与人对话一样提出后续问题&#xff0c;…

进程概念(三)----- fork 初识

目录 前言1. pid && ppid2. forka. 为什么 fork 要给子进程返回 0&#xff0c; 给父进程返回子进程的 pid &#xff1f;b. 一个函数是如何做到两次的&#xff1f;c. fork 函数在干什么&#xff1f;d. 一个变量怎么做到拥有不同的内容的&#xff1f;e. 拓展&#xff1a;…

SpringBoot Vue使用Jwt实现简单的权限管理

为实现Jwt简单的权限管理&#xff0c;我们需要用Jwt工具来生成token&#xff0c;也需要用Jwt来解码token&#xff0c;同时需要添加Jwt拦截器来决定放行还是拦截。下面来实现&#xff1a; 1、gradle引入Jwt、hutool插件 implementation com.auth0:java-jwt:3.10.3implementatio…

小红书电商首提“生活方式电商”定义,个性化需求也能做成好生意

近日&#xff0c;小红书发布COO柯南与经济学者薛兆丰的对谈视频。对谈中柯南首次对外定义&#xff0c;小红书电商是“生活方式电商”。 柯南表示&#xff0c;生活方式电商是让用户在小红书买到的&#xff0c;不仅是好产品&#xff0c;也是一种向往的生活。 随着生活方式的多元…

人工智能算法工程师(高级)课程5-图像生成项目之对抗生成模型与代码详解

大家好,我是微学AI,今天给大家介绍一下人工智能算法工程师(高级)课程5-图像生成项目之对抗生成模型与代码详解。本文将介绍对抗生成模型(GAN)及其变体CGAN、DCGAN的数学原理,并通过PyTorch框架搭建完整可运行的代码,帮助读者掌握图像生成的原理和技术。 文章目录 一、GA…