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

从C到C++,C++入门篇(1)

1.什么是C++

C++是一种通用编程语言,由Bjarne Stroustrup在1980年代初开发,作为C语言的扩展。

C++支持多种编程范式,包括过程式编程、数据抽象、面向对象编程和泛型编程等。

这种语言在操作系统、游戏开发、图形界面、嵌入式系统、分布式系统、网络编程、科学计算等领域都有广泛的应用。

C++的设计提供了比C语言更强的功能,同时保持了C语言的简洁和高效。

2.C++关键字

C语言有32个关键字,而C++有63个关键字。关键字(keyword)属于保留字,是整个语言范围内预先保留的标识符。每个C++关键字都有特殊的含义。

3.命名空间

命名空间是许多编程语言使用的一种代码组织的形式,通过命名空间来分类,区别不同的代码功能,避免不同的代码片段(通常由不同的人协同工作或调用已有的代码片段)同时使用时由于不同代码间变量名相同而造成冲突。

3.1命名空间的定义

  • 使用namespace关键字,后跟命名空间的名字,然后接一对{} 即可,{}中即为命名空间的名字
  • 命名空间中可以定义变量,函数,类型
namespace flower
{int rand = 10;int Add(int left,int right){return left+right;}struct Node{struct Node* next;int val;};
}
  • 命名空间可以嵌套
//命名空间N1嵌套了N2
namespace N1
{int a;int b;int Add(int left,int right){return left+right;}namespace N2{int c;int d;int Sub(int left,int right){return left-right;}}
}
  • 同一个工程中允许存在多个相同名称的命名空间,编译器最后会合成为同一个命名空间

3.2命名空间的使用

假设我定义了一个命名空间shaoyao 

namespace shaoyao
{int a = 0;int b = 1;int Add(int left,int right){return left+right;}struct Node{struct Node*next;int val;};
}

使用方法如下:

  • 加命名空间名称即作用域限定符,实现指定访问
int main()
{printf(“%d\n,N::a”);return 0;
}
  • 使用using将命名空间中某个成员引入,指定展开某一个
using N::b;
int main()
{printf("%d\n",N::a);printf("%d\n",b);return 0;
}
//适用于b经常使用,a不常使用的情况
  • 使用using namespace将命名空间名称引入 
using namespace N;
int main()
{printf("%d\n",N::a);printf("%d\n",b);Add(10,20);return 0;
}
//但注意,尽可能不要随意展开命名空间,因为同时展开多个命名空间容易出问题

 4.C++的输入和输出

C++虽然也支持printf,scanf等写法,但是C++通常习惯用cin和cout实现输入输出

#include<iostream>
//std是C++标准库的命名空间名,C++将标准库的定义和实现都放在这个命名空间里
using namespece std;
int main()
{cout<<"Hello world!"<<endl;return 0;
}
  •  使用cout标准输出对象(控制台)cin标准输入对象(键盘)时,必须包括<iostream>头文件,并且按照命名空间使用方法使用std
  • cout和cin是全局的流对象,endl是特殊的C++符号,表示换行输出,他们都包含在<iostream>头文件中
  • <<是流插入运算符,>>是流提取运算符
  • C++的输入输出相比于C语言更加方便,它可以自动识别变量类型
//C++的输入输出可以自动识别变量类型
#include<iostream>
using namespace std;int main()
{int a;double b;char c;cin>>a;cin>>a>>c;cout<<a<<endl;cout<<b<<" "<<c<<endl;return 0;
}

5.缺省参数

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

举例:

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

5.1缺省参数的分类

  • 全缺省参数
//为所有变量指定了默认参数
void Func(int a= 10; int b= 20; int c = 30)
{cout<<"a = "<<a<<endl;cout<<"b = "<<b<<endl;cout<<"c = "<<c<<end;
}
  • 半缺省参数
void Func(int a,int b = 10; int c = 20)
{cout<<"a = "<<a<<endl;cout<<"b = "<<b<<endl;cout<<"c = "<<c<<endl;
}

5.2注意点

  • 半缺省参数必须从右往左依次给出,比如 int a = 10, int b = 30,int c这种写法是不行的,容易产生歧义
  • 缺省参数不能在函数声明和定义中同时出现,因为如果两个位置提供的值不同,那么编译器就无法确定到底该用哪个缺省值
  • 缺省值必须是常量或者全局变量

在下一节中,小编会继续为大家介绍C++入门相关的知识点

点赞+关注+评论,小编将持续产出优质好文!

相关文章:

  • 10-探索 Intersection Observer API:高效管理元素可见性
  • 案例实践 | 基于长安链的首钢供应链金融科技服务平台
  • 华为RH2288H V3服务器iBMC的SSL证书续期
  • RT-DETR:端到端的实时Transformer检测模型(目标检测+跟踪)
  • 电脑技巧:推荐五款非常好用的电脑模拟器,值得收藏
  • 腾讯云SSL证书获取及Nginx配置教程
  • AI产品经理系列-如何使用kimi快速撰写用户故事(含提示词)
  • 【leetcode--盛水最多的容器】
  • Scikit-Learn随机森林分类
  • 函数的多返回值、函数多种传参方式 学会啦!继续学习~
  • vulntarget-b记录(Sliver学习)
  • 探讨微服务架构如何降低系统复杂度
  • 隔离变压器的特点与作用
  • 【ai】livekit服务本地开发模式1:example app信令交互详细流程
  • 就业班 第四阶段(docker) 2401--5.29 day3 Dockerfile+前后段项目若依ruoyi
  • [Vue CLI 3] 配置解析之 css.extract
  • [数据结构]链表的实现在PHP中
  • 【编码】-360实习笔试编程题(二)-2016.03.29
  • Android Studio:GIT提交项目到远程仓库
  • Android 架构优化~MVP 架构改造
  • iOS帅气加载动画、通知视图、红包助手、引导页、导航栏、朋友圈、小游戏等效果源码...
  • JAVA_NIO系列——Channel和Buffer详解
  • Java多线程(4):使用线程池执行定时任务
  • 从输入URL到页面加载发生了什么
  • 动手做个聊天室,前端工程师百无聊赖的人生
  • 基于HAProxy的高性能缓存服务器nuster
  • 前端每日实战:61# 视频演示如何用纯 CSS 创作一只咖啡壶
  • postgresql行列转换函数
  • 如何正确理解,内页权重高于首页?
  • #Java第九次作业--输入输出流和文件操作
  • ${factoryList }后面有空格不影响
  • (+3)1.3敏捷宣言与敏捷过程的特点
  • (9)目标检测_SSD的原理
  • (C++哈希表01)
  • (MATLAB)第五章-矩阵运算
  • (二)hibernate配置管理
  • (附源码)ssm高校运动会管理系统 毕业设计 020419
  • (经验分享)作为一名普通本科计算机专业学生,我大学四年到底走了多少弯路
  • (精确度,召回率,真阳性,假阳性)ACC、敏感性、特异性等 ROC指标
  • (十)T检验-第一部分
  • *算法训练(leetcode)第三十九天 | 115. 不同的子序列、583. 两个字符串的删除操作、72. 编辑距离
  • .net Application的目录
  • .NET CORE Aws S3 使用
  • .NET Framework Client Profile - a Subset of the .NET Framework Redistribution
  • .net 开发怎么实现前后端分离_前后端分离:分离式开发和一体式发布
  • .NET 某和OA办公系统全局绕过漏洞分析
  • .netcore 如何获取系统中所有session_如何把百度推广中获取的线索(基木鱼,电话,百度商桥等)同步到企业微信或者企业CRM等企业营销系统中...
  • .NET设计模式(11):组合模式(Composite Pattern)
  • //usr/lib/libgdal.so.20:对‘sqlite3_column_table_name’未定义的引用
  • @ResponseBody
  • [ 渗透工具篇 ] 一篇文章让你掌握神奇的shuize -- 信息收集自动化工具
  • [000-01-022].第03节:RabbitMQ环境搭建
  • [ACP云计算]组件介绍
  • [Android] Binder 里的 Service 和 Interface 分别是什么
  • [c++] 什么是平凡类型,标准布局类型,POD类型,聚合体