【C++要哮着学】初识C++,什么是C++?什么是命名空间?什么又是缺省函数?

文章目录

  • 前言
  • 1、C++简介
    • 1.1、什么是C++
    • 1.2、C++起源
    • 1.3、C++发展
  • 2、C++关键字(C++98)
  • 3、命名空间
    • 3.1、命名空间的定义及使用
    • 3.2、命名空间的嵌套
    • 3.3、命名空间的三种使用方式
      • 3.3.1、加命名空间名称及作用域限定符
      • 3.3.2、使用using将命名空间中某个成员引入
      • 3.3.3、使用using namespace 命名空间名称 引入
  • 4、C++输入&输出
  • 5、缺省参数
    • 5.1、缺省参数的概念
    • 5.2、缺省参数分类
      • 全缺省
      • 半缺省


前言

1、C++简介

1.1、什么是C++

C语言是结构化和模块化的语言,适合处理较小规模的程序。对于复杂的问题,规模较大的程序,需要高度的抽象和建模时,C语言则不合适。为了解决软件危机, 20世纪80年代, 计算机界提出了OOP(objectoriented programming:面向对象)思想,支持面向对象的程序设计语言应运而生。1982年,Bjarne Stroustrup博士在C语言的基础上引入并扩充了面向对象的概念,发明了一种新的程序语言。为了表达该语言与C语言的渊源关系,命名为C++。因此:C++是基于C语言而产生的,它既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行面向对象的程序设计。

1.2、C++起源

与C语言一样,C++也是在贝尔实验室诞生的,Bjarne Stroustrup于20世纪80年代在这里开发出了这种语言。Stroustrup比较关系的是让C++更有用,而不是实施特定的编程原理和风格。名称C++来自C语言的递增运算符++,名称C++表示它是C的扩充版本。

1.3、C++发展

C++是一门以C为基础发展而来的一门面向对象的高级程序设计语言,从1983年在贝尔实验室创立开始至今,已有30多个年头。C++从最初的C with class,经历了从C++98、C++ 03、C++ 11、C++ 14再到C++17多次标准化改造,功能得到了极大的丰富,已经演变为一门集面向过程、面向对象、函数式、泛型和元编程等多种编程范式的复杂编程语言。由于C++过于复杂,并且经历了长时间的发展演变,目前对于C++标准支持的较好主要有GNU C++和Visual C++,严格来说,目前还没有一个完全支持ISO C++的版本。

2、C++关键字(C++98)

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

在这里插入图片描述

3、命名空间

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

我们知道在学习C语言的过程中我们知道有一个函数叫做rand函数,该函数用于生成伪随机整数。下面看一个简单的程序:
在这里插入图片描述

由上图可见,一切都没问题,编译器也没报错,程序正常执行,但若是在包含rand函数所在的头文件为前提的结果是什么? 如下图所示:
在这里插入图片描述
!?是的,居然报错了!

原因是,在程序运行时,计算机先会在局部寻找变量,当局部内未找到时则回去全局找;
在全局找时找到了两个 rand (一个为头文件内的rand函数,一个为所创建的变量rand);
此时也不知该打印哪一个rand,这就叫命名冲突

但是在C++中,有位叫做命名空间的“大人”,一般,像rand这样子的函数都会被存放在C++中标准库类型对象的命名空间std中。

3.1、命名空间的定义及使用

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

#include<iostream>
using namespace std;//定义一个名为bit的命名空间
namespace bit
{int rand = 1;
}
int main()
{cout << rand << endl;//打印randcout << bit::rand << endl;//打印bit里面的rand,其中::表示作用域限定符,指定打印区域内容return 0;
}

看吧程序并没有报错
在这里插入图片描述

3.2、命名空间的嵌套

#include<iostream>
using namespace std;
namespace bit
{namespace zs{void push(){cout << "zs" << endl;}}namespace ls{void push(){cout << "ls" << endl;}}
}
int main()
{cout << "xxxx" << endl;cout << "xxxx" << endl;cout << "xxxx" << endl;cout << "xxxx" << endl;bit::ls::push();bit::zs::push();return 0;
}

在这里插入图片描述

除此之外,同一个工程中允许存在多个相同名称的命名空间,编译器最后会合成同一个命名空间中

3.3、命名空间的三种使用方式

3.3.1、加命名空间名称及作用域限定符

在这里插入图片描述

3.3.2、使用using将命名空间中某个成员引入

在这里插入图片描述

3.3.3、使用using namespace 命名空间名称 引入

在这里插入图片描述

4、C++输入&输出

实现打印我们的第一个C++程序:“Hello World !!”。

#include<iostream>
using namespace std;
int main()
{cout << "Hello World!!" << endl;return 0;
}

在这里插入图片描述
说明:

  1. 使用cout标准输出对象(控制台)和cin标准输入对象(键盘)时,必须包含< iostream >头文件以及按命名空间使用方法使用std。
  2. cout和cin是全局的流对象,endl是特殊的C++符号,表示换行输出,他们都包含在包含< iostream >头文件中。
  3. << 是流插入运算符,>> 是流提取运算符。
  4. 使用C++输入输出更方便,不需要像printf/scanf输入输出时那样,需要手动控制格式。
    C++的输入输出可以自动识别变量类型。
  5. 使用C++输入输出更方便,不需要像 printf/scanf 输入输出时手动控制格式。C++的输入输出可以自动识别变量类型。
    *注意:早期标准库将所有功能在全局域中实现,声明在.h后缀的头文件中,使用时只需包含对应头文件即可,后来将其实现在std命名空间下,为了和C头文件区分,也为了正确使用命名空间,规定C++头文件不带.h;旧编译器(vc 6.0)中还支持<iostream.h>格式,后续编译器已不支持,因此推荐使用+std的方式。 *
#include <iostream>
using namespace std;
int main()
{int a;double b;char c;// 可以自动识别变量的类型cin>>a;cin>>b>>c;cout<<a<<endl;cout<<b<<" "<<c<<endl;return 0;
}

std命名空间的使用惯例:
std是C++标准库的命名空间,如何展开std使用更合理呢?

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

5、缺省参数

5.1、缺省参数的概念

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

#include <iostream>
using namespace std;
void Test(int x = 1)
{cout << x << endl;
}
int main()
{Test();//调用时并没有传参,使用的参数为默认值,1Test(10);//指定参数10return 0;
}

在这里插入图片描述

5.2、缺省参数分类

全缺省

#include <iostream>
using namespace std;
void func1(int a = 0, int b = 1, int c = 2)
{cout << a << endl;cout << b << endl;cout << c << endl;
}
int main()
{func1();return 0;
}

在这里插入图片描述

半缺省

#include <iostream>
using namespace std;
void func1(int a = 0, int b = 1, int c = 2)
{cout << a << endl;cout << b << endl;cout << c << endl;
}
int main()
{func1(10,20);//调用时只给了两个参数return 0;
}

在这里插入图片描述

注意:

  1. 半缺省参数必须从右往左依次来给出,不能间隔着给
  2. 缺省参数不能在函数声明和定义中同时出现
    在这里插入图片描述
  3. 缺省值必须是常量或者全局变量
  4. C语言不支持(编译器不支持)

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

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

相关文章

大舍传媒教你海外媒体广告投放的3个细分人群,“无需担忧!”

细分人群的重要性 在海外进行媒体广告投放时&#xff0c;理解和准确定位目标受众群体至关重要。细分人群可以帮助我们更好地了解他们的需求、兴趣和行为习惯&#xff0c;从而有效提升广告传播效果。本文将介绍大舍传媒推荐的三个海外细分人群&#xff0c;并为您提供解决方案&am…

Today At Apple 2024.05.12 上海静安 制作属于自己的表情符号

官网&#xff1a; https://www.apple.com/today/Apple 亚洲第一大商店&#xff1a;Apple 静安零售店现已在上海开幕如下预约课程&#xff1a;下载 Apple Store&#xff08;不是app store&#xff09;&#xff0c;点击课程预约笔记&#xff1a;Today At Apple Notes果粉加群 &am…

【Web后端】Tomcat简介_安装_解决乱码_idea配置

1.1 简介 tomcat是在oracle公司的ISWDK(lavaServer Web DelevopmentKit)的基础上发展起来的一个优秀的开源的servlet容器tomcat使用java语言编写。运行稳定、可靠、效率高&#xff0c;可以和目前 主流web服务器一起工作(如IIS、Apache、 Nginx)tomcat是Apache软件基金会(Apach…

Today At Apple 2024.04.22 Iphone 入门 Mac 办公高4个效技巧

官网&#xff1a; https://www.apple.com/today/Apple 亚洲第一大商店&#xff1a;Apple 静安零售店现已在上海开幕如下预约课程&#xff1a;下载 Apple Store&#xff08;不是app store&#xff09;&#xff0c;点击课程预约笔记&#xff1a;Today At Apple Notes果粉加群 &am…

软件测试面试题100题

一、测试理论 3.1 你们原来项目的测试流程是怎么样的? 我们的测试流程主要有三个阶段&#xff1a;需求了解分析、测试准备、测试执行。 1、需求了解分析阶段 我们的 SE 会把需求文档给我们自己先去了解一到两天这样&#xff0c;之后我们会有一个需求澄清会议&#xff0c; …

微信小程序之转盘抽奖

1. 实现效果 2. 实现过程 话不多说&#xff0c;直接上代码 /**index.wxml */ <view class"title">旋转大转盘</view> <view class"rote-box fcc"><view class"box fcc"><image class"bg" src"/stat…

cookie、session、token、表单、json、jsonp、websocket、ajax都是什么

前后端数据交互的几种方式 1.cookie Cookie是服务器保存在客户端的一小段数据&#xff0c;&#xff08;使用Cookie的前提是客户端浏览器允许使用Cookie并对此做出相应的设置。&#xff09; cookie是一种存储在用户计算机上的小型数据文件&#xff0c;常用于在web应用程序中跟…

SpringCloud2024最新版链路追踪教程micrometer+zipkin

本文基于B站尚硅谷2024版springcloud教学视频&#xff0c;主要用于自己学习记录以及分享技术&#xff0c;侵权私删 自己本机环境信息&#xff1a; jdk&#xff1a;17.0.10springboot&#xff1a;3.2.0springcloud&#xff1a;2023.0.0 micrometer 之前行业内使用的分布式链路…

宝塔面板Docker+Uwsgi+Nginx+SSL部署Django项目

这次为大家带来的是从零开始搭建一个django项目并将它部署到linux服务器上。大家可以按照我的步骤一步步操作&#xff0c;最终可以完成部署。 步骤1&#xff1a;在某个文件夹中创建一个django项目 安装django pip install django创建一个django项目将其命名为djangoProject …

Ubuntu系统搭建Tipask开源问答系统并发布公网分享好友远程访问

文章目录 1. 前言2.Tipask网站搭建2.1 Tipask网站下载和安装2.2 Tipask网页测试2.3 cpolar的安装和注册 3. 本地网页发布3.1 Cpolar临时数据隧道3.2 Cpolar稳定隧道&#xff08;云端设置&#xff09;3.3 Cpolar稳定隧道&#xff08;本地设置&#xff09; 4. 公网访问测试5. 结语…

STM32——TIMER(定时器)篇

技术笔记&#xff01; 1. 定时器概述&#xff08;了解&#xff09; 1.1 软件定时器原理 使用纯软件&#xff08;CPU死等&#xff09;的方式实现定时&#xff08;延时&#xff09;功能 缺点&#xff1a;1. 延时不准确 2. CPU死等。 1.2 定时器定时原理 1.…

品牌舆情都包含什么内容?建议收藏

一个品牌的声誉、形象、产品质量、服务质量等&#xff0c;无时无刻不在接受着大众的检验。互联网传播迅速&#xff0c;一个不好的舆论直接导致整个品牌的声誉受到严重影响。品牌舆情都包含什么内容&#xff1f;接下来伯乐网络传媒就来给大家讲一讲。 一、品牌舆情的基本构成 1…

冯喜运:5.13黄金晚间还会跌吗?原油还会涨吗?

【黄金消息面分析】&#xff1a;自5月初以来&#xff0c;黄金和白银一直在享受需求的回归&#xff0c;买家在过去几天加大了力度&#xff0c;一度推动金价重返2370美元上方&#xff0c;白银重返28.5美元上方。不过&#xff0c;经过几天的盘整后&#xff0c;黄金白银价格双双下跌…

【npm】解决npm包突然消失MODULE_NOT_FOUND

今天折腾新特性时需要升级nodejs&#xff0c;安装新版后npm离奇消失了。C:\Users\**用户名\AppData\Roaming\npm\node_modules下只有cnpm&#xff0c;没有npm的目录。重装nodejs也不好使。 机智如我&#xff0c;试了下cnpm -v是正常的&#xff0c;而且能看到nodejs&#xff0c;…

什么是.faust勒索病毒?应该如何防御?

faust勒索病毒详细介绍 faust勒索病毒是一种新型的勒索软件&#xff0c;最早出现在2018年。该病毒通过加密计算机系统中的文件并要求支付赎金来解锁文件&#xff0c;从而获取经济利益。与传统的勒索软件相比&#xff0c;faust勒索病毒采用了更加先进的加密算法和隐藏技术&#…

山洪灾害无线预警广播系统的主要设备和功能

一、背景 山洪泥石流是指在山区或者其他沟谷深壑&#xff0c;地形险峻的地区&#xff0c;因为暴雨、暴雪或其他自然灾害引发的洪水、山体滑坡并携带有大量泥沙以及石块的特殊洪流。山洪泥石流等地质灾害具有突然性以及流速快&#xff0c;流量大&#xff0c;物质容量大和破坏力…

光数据传送器|光通讯传感器极速版OPT系列尺寸与安装步骤

光数据传送器|光通讯传感器极速版OPT系列是利用可见光及不可见光作为信息载体&#xff0c;无需光纤、网线等有线介质&#xff0c;在空中直接进行信息传输的无线方式通信。驱动光源以可见光及不可见光的高速明暗变化来传输数字信号&#xff0c;以极高光频率双向发射接收光信号&a…

python跟C++选哪个?

选择使用Python还是C取决于你的具体需求和项目背景。我这里有一套编程入门教程&#xff0c;不仅包含了详细的视频讲解&#xff0c;项目实战。如果你渴望学习编程&#xff0c;不妨点个关注&#xff0c;给个评论222&#xff0c;私信22&#xff0c;我在后台发给你。 在通信工程行业…

QT C++(QWidget类及其常见的属性)

文章目录 1. QWidget类及其常见的属性 1. QWidget类及其常见的属性 QT各种控件都是继承自QWidget类&#xff0c;QWidget类是QT控件体系中通用的部分。 QWidget属性如下图 常见的QT属性为&#xff1a; enabled&#xff1a;描述控件是否处于可用状态&#xff08;禁用状态这个…

Python 求高斯误差函数 erf 和 erfc

文章目录 Part.I IntroductionPart.II 概念定义Chap.I 误差函数 erfChap.II 误差函数补 erfc Part.II 求值与绘图Chap.I 求取方式Chap.II 绘图 Reference Part.I Introduction 本文将对误差函数&#xff08;ERror Function, ERF&#xff09;进行简单的介绍&#xff0c;并探索如…