【C++】初识C++(一)

一.什么是C++

C语言是结构化和模块化的语言,适合处理较小规模的程序。对于复杂的问题,规模较大的程序,需要高度 的抽象和建模时,C语言则不合适。为了解决软件危机, 20世纪80年代, 计算机界提出了OOP(object oriented programming:面向对象)思想,支持面向对象的程序设计语言应运而生。

1982年,Bjarne Stroustrup博士在C语言的基础上引入并扩充了面向对象的概念,发明了一种新的程序语 言。为了表达该语言与C语言的渊源关系,命名为C++。因此:C++是基于C语言而产生的,它既可以进行C语 言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行面向对象的程序设计

C++的发展史

1979年,贝尔实验室的本贾尼等人试图分析unix内核的时候,试图将内核模块化,于是在C语言的基础上进行扩展,增加了类的机制,完成了一个可以运行的预处理程序,称之为C with classes。

C++的历史版本:

 C++的关键字

在(C++98)版本中,相较于C语言C++增加了31个关键字,一共63个。

二、命名空间 

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

命名空间定义

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

普通定义
namespace swean
{int rand = 10;int Add(int left, int right){return left + right;}}
嵌套定义
namespace swean
{int rand = 10;namespace swean1{int rand = 1;}
}
空间合并

同一个工程中允许存在多个相同名称的命名空间,编译器最后会将其成员合成在同一个命名空间中,所以我们不能在同一个命名空间中定义两个相同名称的成员。

命名空间使用

那么,命名空间应该如何使用呢,我们有以下三种方法:

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

符号“::”在C++中叫做域作用限定符,我们通过“命名空间名称::命名空间成员”便可以访问到命名空间中相应的成员。:: 的左边为,如果有命名空间域,则限定访问命名空间域中的内容,如果域左边为空,访问的就是全局域,会直接到全局范围内找 :: 右边的变量或其他。

int rand = 0;namespace swean
{int rand = 10;namespace swean1{int rand = 1;}
}int main()
{//printf("%d\n", rand);//域作用限定符printf("%p\n", rand);printf("%d\n", swean::rand);printf("%d\n", swean::swean1::rand);return 0;
}
使用using将命名空间中的成员引入

 用“using 命名空间名称::命名空间成员”的方式将命名空间中指定的成员引入。这样一来,在该语句之后的代码中就可以直接使用引入的成员变量了。

#include <stdio.h>
namespace swean
{int rand;
}
using swean::rand;
int main()
{rand = 10;printf("%d\n", rand);return 0;
}
使用using namespace 命名空间名称引入

通过”using namespace 命名空间名称“将命名空间中的全部成员引入。这样一来,在该语句之后的代码中就可以直接使用该命名空间内的全部成员了。 

#include <stdio.h>
namespace swean
{int rand;
}
using namespace swean;
int main()
{rand = 10;printf("%d\n", rand);return 0;
}

 三、C++输入&输出

#include<iostream>
//std是C++标准库的命名空间
//using namespace std;
using std::cout;
using std::endl;int main()
{// << 流插入运算符cout << "hello world" << "\n";std::cout << "hello world" << std::endl;int i = 0;// << 流提取std::cin >> i;return 0;
}

1. 使用cout标准输出对象(控制台)和cin标准输入对象(键盘)时,必须包含< iostream >头文件 以及按命名空间使用方法使用std。

2. cout和cin是全局的流对象,endl是特殊的C++符号,表示换行输出,他们都包含在包含< iostream >头文件中。

3. >是流提取运算符。

4. 使用C++输入输出更方便,不需要像printf/scanf输入输出时那样,需要手动控制格式。 C++的输入输出可以自动识别变量类型。

#include <iostream>
using namespace std;
int main()
{int i;double d;char arr[20];cin >> i;//读取一个整型cin >> d;//读取一个浮点型cin >> arr;//读取一个字符串cout << i << endl;//打印整型icout << d << endl;//打印浮点型dcout << arr << endl;//打印字符串arrreturn 0;
}

四、缺省参数

缺省参数概念

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

void func(int a = 1)
{cout << a << endl;
}

缺省参数分类

全缺省参数

全缺省参数,即函数的全部形参都设置为缺省参数。

//全缺省
void func1(int a = 10, int b = 10, int c = 30)
{cout << "a = " << a << endl;cout << "b = " << b << endl;cout << "c = " << c << endl << endl;
}
半缺省参数

半缺省参数必须从右往左依次给出,不能间隔着给。传参时必须连续,缺省值使用必须从右往左连续使用 

//半缺省
void func2(int a, int b = 10, int c = 30)
{cout << "a = " << a << endl;cout << "b = " << b << endl;cout << "c = " << c << endl << endl;
}

注意:

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

一般是,声明时给缺省值,定义不给。.

//错误案例void func1(int a = 10, int b = 10, int c = 30);
void func1(int a = 10, int b = 10, int c = 30)
{cout << "a = " << a << endl;cout << "b = " << b << endl;cout << "c = " << c << endl << endl;
}

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

五、函数重载

函数重载概念

函数重载是函数的一种特殊情况,C++允许在同一作用域中声明几个功能类似的同名函数,这 些同名函数的形参列表(参数个数 或 类型 或 类型顺序)不同,常用来处理实现功能类似数据类型 不同的问题。

#include <iostream>
using namespace std;
int Add(int x, int y)
{return x + y;
}double Add(double x, double y)
{return x + y;
}int main()
{cout << Add(1, 2) << endl;cout << Add(1.1, 2.2) << endl;return 0;
}

函数重载的原理--名字修饰

为什么C++支持函数重载,而C语言不支持函数重载呢? 在C/C++中,一个程序要运行起来,需要经历以下几个阶段:预处理、编译、汇编、链接。

在C语言中,汇编阶段进行符号汇总时,一个函数汇总后的符号就是其函数名,所以当汇总时发现多个相同的函数符号时,编译器便会报错。

而 C++ 在进行符号汇总时,对函数的名字修饰做了改动,函数汇总出的符号不只是函数的函数名,而是通过其参数的类型和个数以及顺序等信息汇总出 一个符号,这样一来,就算是函数名相同的函数,只要其参数的类型或参数的个数或参数的顺序不同,那么汇总出来的符号也就不同了。

vs:

gcc:

 

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

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

相关文章

图形处理单元(GPU)在现代计算中的应用与挑战(研究论文框架)

摘要:随着高性能计算需求的日益增长,图形处理单元(GPU)已从专业的图形渲染处理器转变为具有高性能并行处理能力的多功能计算平台。本文将探讨GPU的核心优势、编程模型、在不同领域的应用以及面临的挑战和限制。此外,还将讨论GPU技术的未来发展趋势和潜在的研究机会。 关键…

mongodb 查询语句学习笔记

基础查询 正则查询 {status: A,$or: [{ qty: { $lt: 30 } }, { item: { $regex: ^p } }] }AND 查询 { "size.h": { $lt: 15 }, "size.uom": "in", status: "D" }OR 查询 { $or: [ { status: "A" }, { qty: { $lt: 30 } …

2024年机动车签字授权人题库,助你冲刺!绝对不会让你后悔!

61.&#xff08;&#xff09;使汽车按驾驶人选定的方向行驶。 A.传动系统 B.行驶系统 C.转向系统 D.制动系统 答案&#xff1a;C 62.&#xff08;&#xff09;使汽车各总成及部件安装在适当的位置&#xff0c;对全车起支承作用以保证汽车正常行驶。 A.传动系统 B.行驶系…

01.计算机图形学概述

01.计算机图形学概述 从技术的角度上看&#xff0c;什么是一个好的画面&#xff1f; 直接看这个画面是不是足够亮&#xff0c;这体现了渲染中的一个技术叫全局光照。 应用范围 游戏&#xff08; Video Games&#xff09;电影/特效&#xff08; Movies&#xff09;动漫/动画&…

如何让Linux系统变得更安全?

本文尝试从linux安全加固、漏洞利用及防御措施、安全意识三个方面思考如何让linux系统变得更加安全. 一、linux常见安全加固操作 对Linux系统进行详细的安全加固操作,可以从多个方面进行,包括系统更新和补丁管理、用户和权限管理、网络安全配置、文件和系统安全、日志和审计…

Qt代码分析

要使用代码分析工具&#xff0c;请在Analyze菜单或(Start Debugging of Startup Project)按钮的下拉菜单中选择它。当您处于调试模式时&#xff0c;您可以通过在调试器工具栏上的菜单中选择工具来切换工具。 您可以将调试模式下的视图拖放到屏幕上的新位置。意见的大小和立场将…

c++关键字default,delete

文章目录 概述defaultdelete 小结 概述 在看一些开源项目的源码的时候&#xff0c;经常会看到default和delete。这2个关键字究竟什么意思呢&#xff1f;这篇文章就来一点一点拆解下。 default 默认构造函数、拷贝构造函数、移动构造函数、拷贝赋值运算符、移动赋值运算符和析…

HDFS学习

3.5 HDFS存储原理 3.5.1 冗余数据保存 作为一个分布式文件系统&#xff0c;为了保证系统的容错性和可用性&#xff0c;HDFS采用了多副本方式对数据进行冗余存储&#xff0c;通常一个数据块的多个副本会被分布到不同的数据节点上。 如图所示&#xff0c;数据块1被分别存放到…

石油化工厂为什么要用专业防爆手机?

防爆手机之所以必须使用专业设计的产品&#xff0c;主要是出于安全考虑&#xff0c;以防止在易燃易爆环境中因手机使用不当引发爆炸事故。以下几点详细解释了使用专业化工防爆手机的必要性&#xff1a; 本质安全设计&#xff1a;顶坚专业防爆手机采用了本质安全&#xff08;本安…

动手学深度学习(Pytorch版)代码实践 -计算机视觉-47转置卷积

47转置卷积 import torch from torch import nn from d2l import torch as d2l# 输入矩阵X和卷积核矩阵K实现基本的转置卷积运算 def trans_conv(X, K):h, w K.shapeY torch.zeros((X.shape[0] h - 1, X.shape[1] w - 1))for i in range(X.shape[0]):for j in range(X.shap…

昇思25天学习打卡营第5天|数据变换Transforms

数据变换Transforms 介绍Transforms分类Common TransformsVision TransformsText TransformsPythonTokenizer LookupLambda Transforms 参考 介绍 MindSpore提供不同种类的数据变换&#xff08;Transforms&#xff09;&#xff0c;配合数据处理Pipeline来实现数据预处理。 所有…

【ROS】apt 找不到 ROS版本?(ROS1和ROS2通用方案)

问题描述 安装ROS底层系统时&#xff0c;经常遇到一个情况就是apt找不到ros的对应版本 解决方案 添加ros官方给的apt源和安装密钥 ROS1 # ros奖项 sudo sh -c echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.li…

数学建模 —— MATLAB中的向量

目录 向量的创建方法 (1)直接输入法 (2)冒号法&#xff08;常用&#xff09; (3)利用MATLAB函数创建 linspace函数 logspace函数 向量元素的引用 (1)单个元素引用 (2)多个元素引用 向量元素的修改和删除 向量的创建方法 在 MATLAB中&#xff0c;向量的创建方法主要有…

微软Edge浏览器多用户配置文件管理:个性化浏览体验

在家庭或工作环境中&#xff0c;经常需要在同一台计算机上为多个用户创建和管理独立的浏览体验。微软Edge浏览器提供了多用户配置文件管理功能&#xff0c;允许用户为每个账户设置独立的书签、历史记录、密码、扩展和设置。本文将详细介绍如何在微软Edge中管理多个用户配置文件…

连接Sql Server时报错:无法通过使用安全套接字层加密与 SQL Server 建立安全连接

JDBC连接Sql Server时报错:无法通过使用安全套接字层加密与 SQL Server 建立安全连接 前言解决办法一解决办法二总结 前言 今天使用jdbc连接sql server突然报错为&#xff1a;SQLServerException: “Encrypt”属性设置为“true”且 “trustServerCertificate”属性设置为“fals…

GoMate:配置化模块化的Retrieval-Augmented Generation (RAG) 框架

文章目录 GoMate简介1.1 GoMate的核心技术文档解析向量存储嵌入模型问题查询文本生成文档更新 1.2 GoMate的应用领域智能客服知识库构建内容生成教育培训法律文书处理 GoMate的产品特色2.1 文档解析2.2 向量存储2.3 嵌入模型2.4 问题查询2.5 文本生成2.6 文档更新 GoMate的使用…

解决SPA(单页应用)首屏加载速度慢

SPA是目前流行的前端开发模式&#xff0c;相对于传统的多页面用户体验更好&#xff0c;操作更顺畅&#xff0c;开发效率也更高。但是SPA首屏加载速度慢一直是个致命的问题&#xff0c;由于SPA应用首次打开需要一次性加载大量的静态资源&#xff0c;这就导致了加载速度慢的问题&…

监听设备方向变化?分享 1 段优质 JS 代码片段!

大家好&#xff0c;我是大澈&#xff01; 本文约 700 字&#xff0c;整篇阅读约需 1 分钟。 每日分享一段优质代码片段。 今天分享一段 JS 代码片段&#xff0c;用于在H5端监听设备方向的变化。 老规矩&#xff0c;先阅读代码片段并思考&#xff0c;再看代码解析再思考&#…

文件夹内-资源名称前加序号排列

问题&#xff1a;在文件夹下的资源可以按时间排序&#xff0c;导入unity后资源顺序会乱掉&#xff0c;不方便按顺序赋值&#xff0c;为了方便&#xff0c;通过下面方法在文件夹下统一在资源名称前按顺序加上序号 win11在文件夹内右键&#xff0c;选择——在终端中打开 输入&a…

制造企业用AI可以做什么?

ChatGPT横空出世&#xff0c;有关AI的浪潮席卷全球&#xff0c;比起人工智能如何改变世界&#xff0c;可能你更感兴趣我能用AI可以做的事情是什么&#xff1f; 制造企业用AI可以做的事情是什么?人工智能在制造企业中可以做很多事情&#xff0c;以下是一些主要的应用&#xff1…