【C++】1.从C语言转向C++

news2025/1/17 4:07:02

目录

一.对C++的认识

二.C++的关键字

三.命名空间

        3.1命名空间的定义                

         3.2命名空间的使用

四.C++的输入与输出

五.缺省参数

        5.1全缺省参数

        5.2半缺省参数

六.函数重载

七.引用

7.1引用的特性

7.2引用和指针的区别

八.内联函数

九.auto关键字(C++11)

十.范围for循环(C++11)

十一.nullptr关键字(C++11)


一.对C++的认识

        首先让我们认识一下祖师爷:   本贾尼·斯特劳斯特卢普

              

        接下来我们就需要了解为什么会有C++语言。

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

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

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


了解了C++的历史,接下来我们就来进入正文了。

二.C++的关键字

        C++完全可以兼容C语言,因此,C语言的关键字也是C++的关键字,而且C++对此作了拓展,C++共有63个关键字,会在后续的学习中逐步接触到。

          

三.命名空间

        目的:对标识符的名称进行本地化来避免命名冲突和名字污染。

        3.1命名空间的定义                

namespace A
{
    int A;
    void Init();
    //可以定义变量/函数/类型,也可以嵌套
    namespace B
    {
        int B;
    }
}

         在一个工程中允许存在着多个名称相同的命名空间,编译器会将其自动合并。

         3.2命名空间的使用

        命名空间共有三种使用方式:

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

                2)使用using将命名空间内的某个成员引入

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

1) A::a;
2)using A::a
3)using namespace A;

四.C++的输入与输出

        和C语言一样,C++的输入和输出也需要包含头文件,C++的头文件为<iostream>

        输入:        cout                <<流插入运算符

        输出:        cin                  >>流提取运算符

        C++和C不同的是,C++可以自动识别变量类型。

        关于std命名空间的使用:

                1.日常练习中,建议直接使用using namespace std;即可

                2.项目开发中,直接展开可能会造成命名冲突,建议使用形如 std::cout 这种格式,

        或指定展开如 using std::cout;

五.缺省参数

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

        5.1全缺省参数

例如:void Func(int a=20,int b=30,int c=40);

        5.2半缺省参数

例如:void Func(int a,int b,int c=10);

        注意:

                1.半缺省参数必须从右向左依次给出,不能间隔着给

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

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

                4.C语言并不支持

六.函数重载

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

#include<iostream>
using namespace std;
// 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 f()
{
 cout << "f()" << endl;
}
void f(int a)
{
 cout << "f(int a)" << endl;
}
// 3、参数类型顺序不同
void f(int a, char b)
{
 cout << "f(int a,char b)" << endl;
}
void f(char b, int a)
{
 cout << "f(char b, int a)" << endl;
}
int main()
{
 Add(10, 20);
 Add(10.1, 20.2);
 f();
 f(10);
 f(10, 'a');
 f('a', 10);
 return 0;
}

        问题:为什么C语言不支持函数重载,而C++支持函数重载?

        回答:在编译阶段,源文件经过预编译,编译,汇编生成.obj文件,在此过程中C语言不对函数名进行任何处理,而C++则对函数名进行修饰。接下来,源文件需要与头文件进行链接生成可执行程序。在C语言中,源文件与头文件链接时是直接通过函数名去检索,而C++是使用修饰后的函数名去检索,从而造成差异。

七.引用

        引用从某种意义上来说就是给给已经存在的变量取了个别名。编译器并不会为它开辟一块新的空间。

7.1引用的特性

        引用在定义时必须初始化。

        一个变量可以有多个引用,而一个引用只能对应一个变量。

        引用的效率比传值调用要高,因为传值调用需要为新变量开辟空间。

7.2引用和指针的区别

        语法上:引用是取别名,没有独立空间。

        底层实现上:引用是按指针方式实现的。

        但在一般情况下不考虑底层实现。

        1. 引用概念上定义一个变量的别名,指针存储一个变量地址。

        2. 引用在定义时必须初始化,指针没有要求

        3. 引用在初始化时引用一个实体后,就不能再引用其他实体,而指针可以在任何时候指向

        任何 一个同类型实体

        4. 没有NULL引用,但有NULL指针

        5. 在sizeof中含义不同:引用结果为引用类型的大小,但指针始终不变。

        6. 引用自加即引用的实体增加1,指针自加即指针向后偏移一个类型的大小 

        7. 有多级指针,但是没有多级引用

        8. 访问实体方式不同,指针需要显式解引用,引用编译器自己处理

        9. 引用比指针使用起来相对更安全

八.内联函数

        关键字:inline

        1)inline对于编译器而言只是建议,而最终的结果取决于编译器。

        2)inline不支持声明定义分离,分离会导致链接错误,因为inline被展开没有函数地址,无法链接。

九.auto关键字(C++11)

        早期使用auto修饰表示是具有自动存储器的局部变量(自动销毁)。C++11中,auto不再是一个存储类型指示符,而是作为一 个新的类型指示符来指示编译器,auto声明的变量必须由编译器在编译时期推导而得。

十.范围for循环(C++11)

        在C++98中遍历数组可以使用如下方式。

void TestFor()
{
 int array[] = { 1, 2, 3, 4, 5 };
 for (int i = 0; i < sizeof(array) / sizeof(array[0]); ++i)
     array[i] *= 2;
 
 for (int* p = array; p < array + sizeof(array)/ sizeof(array[0]); ++p)
     cout << *p << endl;
}

        而在C++11中提供了另一种遍历方式。for循环后的括号由冒号“ :”分为两部分:第一部分是范 围内用于迭代的变量,第二部分则表示被迭代的范围。

void TestFor()
{
 int array[] = { 1, 2, 3, 4, 5 };
 for(auto& e : array)
     e *= 2;
 
 for(auto e : array)
     cout << e << " ";
 
 return 0;
}

十一.nullptr关键字(C++11)

        NULL可能被定义为字面常量0,或者被定义为无类型指针(void*)的常量。因此为了提高代码的健壮性,在后续表示指针空值时建议最好使用nullptr。

        在C++11中,sizeof(nullptr) 与 sizeof((void*)0)所占的字节数相同

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

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

相关文章

面试:如何设计一个注册中心?

大家好&#xff0c;我是田哥 上周&#xff0c;一位群里的朋友反馈面试情况&#xff1a; 今天&#xff0c;给大家分享如何设计一个注册中心。其实这个问题&#xff0c;我之前在知识星球里分享过&#xff0c;可能是因为时间比较久了&#xff0c;加上这位朋友加入不久&#xff0c;…

提升编程效率的秘密武器:IntelliJ IDEA

IntelliJ IDEA的基本介绍 正如一个故事的开头&#xff0c;我们从一个名字开始 - IntelliJ IDEA。这是一个在程序员中广受欢迎的集成开发环境&#xff08;IDE&#xff09;&#xff0c;由捷克公司JetBrains开发。它的名字听起来有些复杂&#xff0c;但实际上&#xff0c;它的功能…

Windows联网状态工具TCPView

文章目录 TCPView命令行工具更多Sysinternals Suite工具 TCPView TCPView用于显示系统上所有 TCP 和 UDP 终结点的详细列表&#xff0c;包括本地和远程地址以及 TCP 连接的状态&#xff0c;界面如下。 列表的表头含义如下 表头含义表头含义Process name应用名称Process id进程…

Web App 入门指南:构建预测模型 App 的利器(shiny)

Web App 入门指南&#xff1a;构建预测模型 App 的利器 简介 近年来&#xff0c;随着机器学习和人工智能技术的快速发展&#xff0c;预测模型在各行各业得到了广泛应用。为了方便地部署和使用预测模型&#xff0c;将模型构建成 Web App 是一种非常好的选择。Web App 无需下载…

【vue】v-if 条件渲染

v-if 不适用于频繁切换显示模式的场景 修改web.user&#xff0c;可看到条件渲染的效果 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initi…

ChatGPT 会被 OpenAI 的版权诉讼摧毁吗?|TodayAI

未来人工智能是否能与人类融合成为一个引人关注的问题&#xff0c;但目前&#xff0c;ChatGPT等人工智能技术可能首先需要面对一个更紧迫的挑战&#xff1a;大规模的版权侵权诉讼。近期&#xff0c;ChatGPT因涉嫌在未经授权的情况下使用大量作者的作品进行训练&#xff0c;而被…

元象4.2B参数 MoE大模型实战

01 简介 近期&#xff0c;元象公司推出了其首个Moe大模型XVERSE-MoE-A4.2B。该模型采用了混合专家模型架构&#xff08;Mixture of Experts&#xff09;&#xff0c;并拥有4.2B的激活参数&#xff0c;其性能可与13B模型相媲美。值得一提的是&#xff0c;这个模型是完全开源的&…

算法设计与分析实验报告c++实现(最近点对问题、循环赛日程安排问题、排序问题、棋盘覆盖问题)

一、实验目的 1&#xff0e;加深学生对分治法算法设计方法的基本思想、基本步骤、基本方法的理解与掌握&#xff1b; 2&#xff0e;提高学生利用课堂所学知识解决实际问题的能力&#xff1b; 3&#xff0e;提高学生综合应用所学知识解决实际问题的能力。 二、实验任务 1、最…

《剑指 Offer》专项突破版 - 面试题 107 : 矩阵中的距离(C++ 实现)

题目链接&#xff1a;矩阵中的距离 题目&#xff1a; 输入一个由 0、1 组成的矩阵 M&#xff0c;请输出一个大小相同的矩阵 D&#xff0c;矩阵 D 中的每个格子是矩阵 M 中对应格子离最近的 0 的距离。水平或竖直方向相邻的两个格子的距离为 1。假设矩阵 M 中至少有一个 0。 …

Google 推出 Gemini 1.5 Pro能处理音频;iOS 18或带来Safari 浏览助手;Llama 3 开源模型下个月推出

Google 推出 Gemini 1.5 Pro 公共预览版&#xff0c;能处理音频 Google 宣布将通过其 AI 应用平台 Vertex AI 向公众提供 Gemini 1.5 Pro&#xff0c;并且还赋予其「听力」&#xff0c;帮助用户处理音频内容。 用户可以上传会议录音、电视节目等音频内容&#xff0c;无需书面记…

Python计算多个表格中多列数据的平均值与标准差并导出为新的Excel文件

本文介绍基于Python语言&#xff0c;对一个或多个表格文件中多列数据分别计算平均值与标准差&#xff0c;随后将多列数据对应的这2个数据结果导出为新的表格文件的方法。 首先&#xff0c;来看一下本文的需求。现有2个.csv格式的表格文件&#xff0c;其每1列表示1个变量&#x…

如何入门做物联网系统压测?

文章目录 一、政策解读二、MQTT 压测常见场景三、MQTT常见业务场景1、并发连接2、消息吞吐量测试2.1 1 对 12.2 多对1&#xff08;上报&#xff09;2.3 1对多2.4 其它场景 三、MQTT常见性能指标四、MQTT常见性能工具1、emqtt-bench2、JMeter 五、小结 一、政策解读 微信公众号…

功能测试_验证标题长度合法性_边界值法

验证标题长度合法性&#xff08;标题长度大于0&#xff0c;小于等于30个字符&#xff09; 开内闭外&#xff0c;保留1和31

《web应用技术》第三次课后练习

实验目的&#xff1a; 1、springboot入门程序撰写并启动 2、使用postman练习参数的获取。 参考&#xff1a;Day04-10. Web入门-SpringBootWeb-快速入门_哔哩哔哩_bilibili

Java | Leetcode Java题解之第16题最接近的三数之和

题目&#xff1a; 题解&#xff1a; class Solution {public int threeSumClosest(int[] nums, int target) {Arrays.sort(nums);int n nums.length;int best 10000000;// 枚举 afor (int i 0; i < n; i) {// 保证和上一次枚举的元素不相等if (i > 0 && nums…

除了谷歌卫星图还有哪些可以平替的卫星影像图源~~

这几天&#xff08;2024-03-27&#xff09;朋友们都开始反应之前我们分享的ArcGIS直接连接谷歌影像还有GlobalMapper下载地址无效了&#xff01; ArcGIS快速添加无偏移谷歌Google影像 如何轻松下载指定区域的谷歌影像 经过测试&#xff0c;没有错&#xff01;它又被墙了&…

【python】python网易云音乐用户数据分析可视化(源码+数据+报告)【独一无二】

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…

【计算机毕业设计】网上宠物商店管理系统——后附源码

&#x1f389;**欢迎来到我的技术世界&#xff01;**&#x1f389; &#x1f4d8; 博主小档案&#xff1a; 一名来自世界500强的资深程序媛&#xff0c;毕业于国内知名985高校。 &#x1f527; 技术专长&#xff1a; 在深度学习任务中展现出卓越的能力&#xff0c;包括但不限于…

DS数模-Mathorcup妈妈杯C题思路

2024Mathorcup数学建模挑战赛&#xff08;妈妈杯&#xff09;C题保姆级分析完整思路代码数据教学 C题题目&#xff1a;物流网络分拣中心货量预测及人员排班 接下来我们将按照题目总体分析-背景分析-各小问分析的形式来 总体分析&#xff1a;题目要求我们处理的是一个关于物流…

AMD Tensile 简介与示例

按照知其然&#xff0c;再知其所以然的认知次序进行 1&#xff0c;下载代码 git clone --recursive https://github.com/ROCm/Tensile.git 2&#xff0c;安装 Tensile cd Tensile mkdir build cd build ../Tensile/bin/Tensile ../Tensile/Configs/rocblas_dgemm_nn_asm_full…