【C++】入门基础知识-1

news2024/12/22 23:01:17

🍬个人主页:Yanni.—

🌈数据结构:Data Structure.​​​​​​

🎂C语言笔记:C Language Notes

🏀OJ题分享: Topic Sharing

目录

前言:

C++关键字

命名空间 

命名空间介绍

命名空间的使用

C++的输入和输出 

cout 输出

cin 输入

std命名空间的使用惯例

缺省参数

缺省参数概念

缺省参数分类

函数重载

函数重载概念

为什么c语言不支持重载


前言:

企业中面试中一般需要面向对象的两种主流语言C++和Java,现在java岗位虽然多,但是内卷严重,经过很长时间的思考,还是选择了C++,可能以后还会进入游戏开发的领域,这恰恰是我感兴趣的,C++前期的基础知识很难,但是过了这道难关之后情况会越来越来。Let's go!

C++关键字

C++ 总计 63 个关键字, C 语言 32 个关键字。

这里在C语言的基础上增加了许多关键字。

命名空间 

命名空间介绍

C/C++ 中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称将都存
在于全局作用域中,可能会导致很多冲突。使用命名空间的目的是 对标识符的名称进行本地化
避免命名冲突或名字污染 namespace 关键字的出现就是针对这种问题的。
#include<stdio.h>
#include<stdlib.h>

int rand = 10;

int main()
{
	printf("%d", rand);
	return 0;
}

我们直到rand产生随机值,但是我们给出了一个全局变量rand,并且赋值了给它。这就导致:

 “rand”: 重定义;以前的定义是“函数”。所以我们得避免命名冲突或名字污染。

命名冲突主要有两个:

1.库冲突

2.项目间,同时工作交接之间的互相命名冲突

因此定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{} 中即为命名空间的成员。

#include<stdio.h>
#include<stdlib.h>

namespace Yanni
{
	int rand = 10;
}

int main()
{
	printf("%d", Yanni::rand);
	return 0;
}

命名空间的三个特性:

1.命名空间中可以定义变量/函数/类型。

2.命名空间可以嵌套。

3.同一个工程中是允许多种同名称的命名空间存在,编译器最后会成同一个命名空间内。

命名空间的使用

命名空间的使用主要有三种方式

1.加命名空间名称及作用域限定符

namespace Yanni // 命名空间名
{
	int r = 10;
}
int main()
{
	printf("%d", Yanni::r);
	return 0;
}

2.使用using将命名空间中某个成员引入

namespace Yanni
{
	int r = 10;
}
using Yanni::r;
int main()
{
	printf("%d",r);
	return 0;
}

这个操作就想是将命名空间里的特定成员变成全局访问。 

 3.使用 using namespace 命名空间名称引入

namespace Yanni
{
	int r = 10;
}
using namespace Yanni;
int main()
{
	printf("%d",r);
	return 0;
}

这就是将命名空间内的所有成员变成全局访问。

C++的输入和输出 

cout 输出

#include<iostream>
//std是C++标准库的命名空间名,C++将标准库的定义都放到这个命名空间中。
using namespace std;

int main()
{
	cout << "hello world" << endl;//endl相当与换行符
	return 0;
}
说明:
1. 使用 cout 标准输出对象 ( 控制台 ) cin 标准输入对象 ( 键盘 ) 时,必须 包含 < iostream > 头文件 以及按命名空间使用方法使用std
2. cout cin 是全局的流对象, endl 是特殊的 C++ 符号,表示换行输出,他们都包含在包含 <iostream >头文件中。
3. << 是流插入运算符, >> 是流提取运算符
4. 使用 C++ 输入输出更方便,不需要像 printf/scanf 输入输出时那样,需要手动控制格式。 C++的输入输出可以自动识别变量类型。
5. 实际上 cout cin 分别是 ostream istream 类型的对象, >> << 也涉及运算符重载等知识, 这些知识我们我们后续才会学习,所以我们这里只是简单学习他们的使用。后面我们还有有 一个章节更深入的学习IO 流用法及原理。
注意:早期标准库将所有功能在全局域中实现,声明在 .h 后缀的头文件中,使用时只需包含对应
头文件即可,后来将其实现在 std 命名空间下,为了和 C 头文件区分,也为了正确使用命名空间,
规定 C++ 头文件不带 .h ;旧编译器 (vc 6.0) 中还支持 <iostream.h> 格式,后续编译器已不支持,因
推荐 使用 <iostream>+std 的方式。

cin 输入

在c语言中,我们定义变量都需要对变量进行初始化,而在C++中,就不需要初始化了,因为cin>>可以自动识别变量类型。

#include<iostream>
//std是C++标准库的命名空间名,C++将标准库的定义都放到这个命名空间中。
using namespace std;

int main()
{
	int a;
	double b;
	char c;
	cin >> a;
	cin >> b >> c;
	cout << a << b << c << endl;

	return 0;
}

std命名空间的使用惯例

std C++ 标准库的命名空间,如何展开 std 使用更合理呢?
1. 在日常练习中,建议直接 using namespace std 即可,这样就很方便。
2. using namespace std 展开,标准库就全部暴露出来了,如果我们定义跟库重名的类型 / 对 象/ 函数,就存在冲突问题。该问题在日常练习中很少出现,但是项目开发中代码较多、规模 大,就很容易出现。所以建议在项目开发中使用,像std::cout 这样使用时指定命名空间 + using std::cout展开常用的库对象 / 类型等方式。

缺省参数

缺省参数概念

缺省参数是 声明或定义函数时 为函数的 参数指定一个缺省值 。在调用该函数时,如果没有指定实
参则采用该形参的缺省值,否则使用指定的实参。
using namespace std;

void Func(int a = 0)
{
	cout << a << endl;
}
int main()
{
	Func();没有传参时,使用参数的默认值
	Func(10);传参时,使用限定的实参
}

缺省参数分类

全缺省参数

void Func(int a = 0,int b = 10,int c = 20)
{
	cout << a << endl;
	cout << b << endl;
	cout << c << endl;
}

半缺省参数

void Func(int a, int b = 10, int c = 20)
{
	cout << a << endl;
	cout << b << endl;
	cout << c << endl;
}

这里要注意的是:

1.半缺省参数必须从右往左依次来给出,不能间隔着给(传参的顺序的从左到右)

2.缺省参数不能再函数声明和定义中同时出现

3.缺省值必须是常量或者全局变量

4.c语言编译器不支持

函数重载

自然语言中,一个词可以有多重含义,人们可以通过上下文来判断该词真实的含义,即该词被重
载了。
比如:以前有一个笑话,国有两个体育项目大家根本不用看,也不用担心。一个是乒乓球,一个
是男足。前者是 谁也赢不了! ,后者是 谁也赢不了“。

函数重载概念

函数重载: 是函数的一种特殊情况, C++ 允许在 同一作用域中 声明几个功能类似 的同名函数 ,这
些同名函数的 形参列表 ( 参数个数 或 类型 或 类型顺序 ) 不同 ,常用来处理实现功能类似数据类型
不同的问题。
1.参数类型不同
int Add(int left, int right)
{
	cout << "int Add(int left, int right)" << endl;
	return left + right;
}

double Add(double left, double right)
{
	cout << "double Add(double left, double right)" << endl;
	return left + right;
}

2.参数个数不同

void Func()
{
	cout << "void Func()" << endl;
}

void Func(int a)
{
	cout << "void Func(int a)" << endl;
}

3.参数类型顺序不同

void F(int a, char b)
{
	cout << "void F(int a, char b)" << endl;
}

void F(char b, int a)
{
	cout << "void F(char b, int a)" << endl;
}

为什么c语言不支持重载

C/C++ 中,一个程序要运行起来,需要经历以下几个阶段: 预处理、编译、汇编、链接。
1. 实际项目通常是由多个头文件和多个源文件构成,而通过 C 语言阶段学习的编译链接,我们
可以知道,【当前 a.cpp 中调用了 b.cpp 中定义的 Add 函数时】,编译后链接前, a.o 的目标
文件中没有 Add 的函数地址,因为 Add 是在 b.cpp 中定义的,所以 Add 的地址在 b.o 中。那么
怎么办呢?
2. 所以链接阶段就是专门处理这种问题, 链接器看到 a.o 调用 Add ,但是没有 Add 的地址,就
会到 b.o 的符号表中找 Add 的地址,然后链接到一起 ( 老师要带同学们回顾一下 )
3. 那么链接时,面对 Add 函数,链接接器会使用哪个名字去找呢?这里每个编译器都有自己的
函数名修饰规则。
4. 由于 Windows vs 的修饰规则过于复杂,而 Linux g++ 的修饰规则简单易懂,下面我们使
用了 g++ 演示了这个修饰后的名字。
5. 通过下面我们可以看出 gcc 的函数修饰后名字不变。而 g++ 的函数修饰后变成【 _Z+ 函数长度
+ 函数名 + 类型首字母】。

 结论:在Linux下,采用g++编译完成后,函数名字的修饰发生改变,编译器将函数参数类型信息添加到修改的名字中。

好啦,这就是今天学习的分享啦!看到希望大家的三连呀!

如果有不当之处,欢迎大佬指正!

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

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

相关文章

【论文翻译】AFLGuard: Byzantine-robust Asynchronous Federated Learning

提示&#xff1a;该论文标题为AFLGuard: Byzantine-robust Asynchronous Federated Learning&#xff0c;我将对其进行部分翻译&#xff0c;便于后续阅读。 文章目录 AFLGuard&#xff1a;拜占庭鲁棒的异步联邦学习一、摘要二、引言三、知识前提拜占庭鲁棒联邦学习 四、问题表述…

JVM(HotSpot):程序计数器(Program Counter Register)

文章目录 一、内存结构图二、案例解读三、工作流程四、特点 一、内存结构图 二、案例解读 我们使用javap对字节码进行反编译&#xff0c;来看下程序计数器怎么体现的。 IDEA写一个简单的Java代码 反编译命令 javap -verbose InitTest.class $ javap -verbose InitTest.clas…

解决Typora图片复制到CSDN无法查看问题

下载安装picgo 山东大学镜像源&#xff1a;https://mirrors.sdu.edu.cn/github-release/Molunerfinn_PicGo 开通阿里云对象存储oss 选择创建 填入内容 购买资源包 创建AccessKey 配置PicGo 设定bucket填入创建bucket名称 注意&#xff1a;设定存储区域只需要填写到区域前缀即…

变电站设备检测系统源码分享

变电站设备检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer V…

C++ 继承:打破代码冗余,提升开发效率

目录 继承的概念和定义 继承的概念 继承的定义 定义格式 继承关系和访问限定符 继承基类成员访问方式的变化 基类和派生类对象赋值转换 继承中的作用域 派生类的默认成员函数 构造函数 拷贝构造 赋值运算符重载 析构函数 继承与友元 继承与静态成员 菱形继承与…

数据库——sql语言学习 查找语句

一、什么是sql SQL是结构化查询语言&#xff08;Structured Query Language&#xff09;的缩写&#xff0c;它是一种专门为数据库设计的操作命令集&#xff0c;用于管理关系数据库管理系统&#xff08;RDBMS&#xff09;。 二、查找相关语句 ‌‌首先&#xff0c;我们已经设…

【SQL】筛选字符串与正则表达式

目录 语法 需求 示例 分析 代码 语法 SELECT column1, column2, ... FROM table_name WHERE condition; WHERE 子句用于指定过滤条件&#xff0c;以限制从数据库表中检索的数据。当你执行一个查询时&#xff0c;WHERE 子句允许你筛选出满足特定条件的记录。如果记录满…

计算计的风向标大转!计算机专业的新纪元已至!

亲爱的读者们&#xff0c; 在这个科技日新月异的时代&#xff0c;计算机专业正以前所未有的速度引领着行业的变革。从传统编程到人工智能、大数据、云计算等新兴技术的崛起&#xff0c;计算机专业的学习与发展路径正经历着翻天覆地的变化。今天&#xff0c;让我们一同探索这个…

短信视频评论dy版提取,免COOKIE 手机版本介绍说明

抖音系统手机版功能介绍说明 一&#xff1a;描述 根据需要升级了手机版本&#xff0c;手机版本和软件版本的功能一样。并且手机版本增加了评论地区筛选功能。&#xff08;后期&#xff1a;1支持自动留痕&#xff0c;自动私信功能。2 支持详细信息和评论提取的tel筛选。3支持A…

15、网络安全合规由来与要素

数据来源&#xff1a;1.网络安全合规由来与要素_哔哩哔哩_bilibili 合规由来 合规&#xff08;Compliance&#xff09;&#xff1a;指服从、顺从和遵从的行为&#xff0c;强调使公司的经营活动与法律、监管及内部规则保持一致。合规涉及公司适应法律法规及社会规范等规则的经营…

CentOS Stream 9部署Redis

1、安装Redis sudo dnf install redis 2、启动Redis服务 sudo systemctl start redis 3、设置Redis开机自启 sudo systemctl enable redis 4、打开Redis配置文件&#xff1a; sudo vi /etc/redis/redis.conf 在配置文件中找到并修改以下两行&#xff0c;确保密码验证功能已启…

Jenkins本地安装配置与远程访问管理本地服务详细流程

文章目录 前言1. 安装Jenkins2. 局域网访问Jenkins3. 安装 cpolar内网穿透软件4. 配置Jenkins公网访问地址5. 公网远程访问Jenkins6. 固定公网地址 前言 本文主要介绍如何在Linux CentOS 7中安装Jenkins并结合cpolar内网穿透工具实现远程访问管理本地部署的Jenkins服务. Jenk…

1小时极限速通MC局域网联机:PCL2 + Zerotier局域网联机方案

目录 前言 你需要在开始之前做什么&#xff1f; 你需要什么 你需要下载什么 谁&#xff0c;需要做什么&#xff1f; STEP I&#xff1a;创建/加入一个子网 创建一个子网&#xff08;子网的维护者做&#xff09; 加入一个子网&#xff08;其他人做&#xff09; 现在... …

【在Linux世界中追寻伟大的One Piece】进程间通信

目录 1 -> 进程间通信介绍 1.1 -> 进程间通信目的 1.2 -> 进程间通信发展 1.3 -> 进程间通信分类 1.3.1 -> 管道 1.3.2 -> System V IPC 1.3.3 -> POSIX IPC 2 -> 管道 2.1 -> 什么是管道 2.2 -> 匿名管道 2.3 -> 实例代码 2.4 -…

ubuntu22安装AI环境

安装Ubuntu驱动 查看可安装Ubuntu驱动列表 sudo ubuntu-drivers devices安装指定驱动 选择带有“recommended”标记的驱动程序即可&#xff0c;更高版本的是最新版&#xff0c;可能存在兼容问题。 apt-get install nvidia-driver-535安装cuda 有几种方法可以做到这一点&…

深入解析两大AI模型的架构与功能

在人工智能&#xff08;AI&#xff09;领域&#xff0c;自然语言处理&#xff08;NLP&#xff09;一直是研究的热点之一。 随着技术的不断进步&#xff0c;我们见证了从简单的聊天机器人到复杂语言模型的演变。 其中&#xff0c;Google的Gemini和OpenAI的ChatGPT作为两大代表…

全志科技发布T536高性能智慧工业芯片,飞凌嵌入式率先推出配套核心板

2024年9月24日下午&#xff0c;全志科技在中国国际工业博览会上成功举办了其最新产品——T536高性能智慧工业芯片的全球首发发布会。这款芯片采用创新的4核Cortex-A55与RISC-V混合架构&#xff0c;主频分别达到1.6GHz和600MHz&#xff0c;并集成了2TOPS算力的NPU&#xff0c;吸…

数据结构与算法实验9 实现无向连通图的最小生成树

文章目录 1.上机名称2.上机要求3.上机环境4.程序清单(写明运行结果及结果分析)4.1 程序清单4.1.1 头文件 Graph.h 内容如下&#xff1a;4.1.2 实现文件 Graph.cpp 内容如下&#xff1a;4.1.3 源文件 main.cpp 内容如下&#xff1a; 4.2 运行结果 5.上机体会 1.上机名称 实现无向…

整数在内存中的存储(c语言)

1.原码 反码 补码&#xff08;以及他们之间的转换&#xff09; 当一个数为正数的时候&#xff0c;不存在原码反码补码的差别&#xff0c;也就是一样的&#xff1b; 当一个数为负数的时候&#xff0c;以-1为例子&#xff0c;对这个过程进行讲解。 1000 0000 0000 0000 0000 0…

多路复用IO

一。进程处理多路IO请求 在没有多路复用IO之前&#xff0c;对于多路IO请求&#xff0c;一般只有阻塞与非阻塞IO两种方式 1.1 阻塞IO 需要结合多进程/多线程&#xff0c;每个进程/线程处理一路IO 缺点&#xff1a;客户端越多&#xff0c;需要创建的进程/线程越多&#xff0c…