C++_01_初步认识C++语言

news2024/11/20 12:35:02

本人博客园亦可见


一、认识 “C++语言”

一、首先聊聊什么是语言?

  语言是一套具有“语法”、“词法”规律的系统,是思维的工具。
  计算程序设计语言是计算机可以识别的语言,用于描述解决问题的方法,供计算机阅读和执行。

  语言由低级到高级依次分为4类:
     1、机器语言           (由二进制 0、1组成,面向计算机的最底层语言)
     2、汇编语言           (机器指令的符号化,类似于英语单词标记某些字符,在机器语言的基础上人性化修改的语言)
     3、高级语言           (面向过程C、面向对象C++、Java、Visual Basic)
     4、非过程化语言

二、回忆一下软件的概念?

  计算机系统包括软件和硬件。
    软件包括使计算机运行所需要的各种程序及其有关的文档资料。软件 = 程序 + 文档(软件各种说明文档) + 其他
    指令就是计算机能识别的命令。程序是这些指令的集合。程序由n条指令组成。

三、C++的诞生?

  C++是有C语言演变过来的。
    1、1973年美国贝尔实验室Dennis M.Ritchie 以B语言为基础创造出C语言
      1990年,ISO接受了C为ISO C的标准( ISO9899-1990 )
    2、由于C语言毕竟是面向过程化的编程语言,更适合开发一些代码量较少的程序,对于代码量较大的程序,C语言就显得比较吃力了,效率较低,且代码较为臃肿。这个时候就需要升级“C语言”,或者改造C语言了。
      1980年AT&T贝尔实验室的Bjarne Stroustrup博士在C语言的基础上为支撑面向对象程序开发设计出新的语言——“带类的C”
      1983年正式取名为C++,1989年开始进行标准化工作,1998年11月贝尔国际表遵化组织(ISO)批准为国际标准。

四、C++的特点?

  • C++C语言的继承,它既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行以继承和多态为特点的面向对象的程序设计。      
           面向过程开发:开发中重点在过程的逻辑判断与流程标准。

          面向对象开发:逻辑判断与流程标准都被封装到类里面,作为标准的API接口,并且设置权限,有公有,保护和私有权限区别。使用时只注重该类的整体定义和调用。
  • C++ 三大特性: 封装,继承,多态。

 

    • C++可以完全兼容C语言的模板
           C++源代码文件:  .cpp
        C++头文件:            .hpp  .h
        C++编译器:          g++

 

如果需要在C++中调用C语言的接口,使用关键字extern

extern “C” {

    C语言的头文件

}

二、走入 “C++语言”

#include<iostream>
using namespace std; //相当于全局定义,后面所有未声明命名空间的标识符默认使用std空间

int main(int argc, char const *argv[])
{
    cout << "hello world!" << endl;
  //std::cout << "hello world!" << std::endl;    
  //如果没有声明using namespace std; 就需要加std::
    return 0;
}

程序中采用了 using 声明命名空间 std,using namespace std;这一语句涵盖了 std 命名空间中的所有标识符,而该命名空间包含 C++ 所有标准库。头文件 iostream 文件中定义的所有变量、函数等都位于 std 命名空间中,每次使用 iostream 中的变量或函数都需要在前面加上std::是非常麻烦的一件事,为此可直接用 using 声明将 std 中的所有变量或函数等都声明出来。

 

namespace命名空间

C++命名空间基本常识

  所谓namespace,是指标识符的各种可见范围。C++标准程序库中的所有标识符都被定义于一个名为std的namespace中。
  一 :<iostream>和<iostream.h>格式不一样,前者没有后缀,实际上,在你的编译器include文件夹里面可以看到,二者是两个文件,打开文件就会发现,里面的代码是不一样的。
    后缀为.h的头文件c++标准已经明确提出不支持了,早些的实现将标准库功能定义在全局空间里,声明在带.h后缀的头文件里,c++标准为了和C区别开,也为了正确使用命名空间,规定头文件不使用后缀.h。
  因此,
    1)当使用<iostream.h>时,相当于在c中调用库函数,使用的是全局命名空间,那时候也没有命名空间namespace的概念,也就是早期的c++实现;
    2)当使用<iostream>的时候,该头文件没有定义全局命名空间,必须使用namespace std;这样才能正确使用cout。

  二: 由于namespace的概念,使用C++标准程序库的任何标识符时,可以有三种选择:
    1、直接指定标识符。例如std::ostream而不是ostream。完整语句如下: std::cout << std::hex << 3.4 << std::endl;
    2、使用using关键字。 using std::cout; using std::endl; using std::cin; 以上程序可以写成 cout << std::hex << 3.4 << endl;
    3、最方便的就是使用using namespace std; 例如: using namespace std;这样命名空间std内定义的所有标识符都有效(曝光)。

    就好像它们被声明为全局变量一样。那么以上语句可以如下写: cout <<hex << 3.4 << endl;因为标准库非常的庞大,所以程序员在选择的类的名称或函数名 时就很有可能和标准库中的某个名字相同。
    所以为了避免这种情况所造成的名字冲突,就把标准库中的一切都被放在名字空间std中。
    但这又会带来了一个新问题。无数原有的C++代码都依赖于使用了多年的伪标准库中的功能,他们都是在全局空间下的。
    所以就有了<iostream.h> 和<iostream>等等这样的头文件,一个是为了兼容以前的C++代码,一个是为了支持新的标准。
    命名空间std封装的是标准程序库的名称,标准程序库为了和以前的头文件区别,一般不加".h"

总结:

    1、当使用<iostream>的时候,该头文件没有定义全局命名空间,必须使用namespace std;这样才能正确使用cout。若不引入using namespace std ,需要这样做。std::cout。
    2、C++标准为了和C区别开,也为了正确使用命名空间,规定头文件不使用后缀.h。
    3、C++命名空间的定义:   namespace name {  …  }
    4、using namespace NameSpaceA;
    5、namespce定义可嵌套。

 

C++的输入输出(cout和cin)

  在 C语言中,通常会采用格式化输入输出函数 printf() 和 scanf() 用于输入或输出数据或信息。在 C++语言中,C语言的这一套输入输出库我们仍能使用,但是 C++语言又自定义了一套新的、更容易使用的输入输出库。
  在 C++程序中,输入与输出可以看做是一连串的数据流,输入即可视为从文件或键盘中输入程序中的一串数据流,而输出则可以视为从程序中输出一连串的数据流到显示屏或文件中。
  在编写 C++程序时,如果需要使用输入输出时,则需要包含头文件<iostream>。<iostream> 中定义了用于输入输出的对象,例如常见的 cin 表示标准输入、cout 表示标准输出、cerr 表示标准错误。
  需要特别强调的是,cin、cout、cerr 不是 C++ 中的关键字,其本质是函数调用,它们的实现采用的是 C++ 的运算符重载,这些知识点将会在后续逐一介绍。其中 cout 和 cerr 的输出目的地都是显示器,但不同的是 cout 是带有缓冲的,而 cerr 则不带缓冲。
  在我们使用 cout 进行输出时需要紧接着使用“<<”操作符,使用 cin 进行输入时需要紧接着使用“>>”操作符,这两个操作符可以自行分析所处理的数据类型,因此无需我们像使用 scanf() 和 printf() 那样设置输入输出格式化语句。
#include <iostream>
//1、iostream.h是旧标准,支持全局变量标准库,没有命名空间的概念
//2、现在使用新标准iostream;支持新引入的作用域
//
//3、#include <头文件>  : 编译器直接去库里找
//4、#include "头文件"  : 编译器先在本地找,再在去库里找
//如果使用自己定义的头文件,老老实实使用"头文件"

//#include <string.h>  //C语言风格
#include <cstring>
//5、C++在C语言头文件的基础上C++风格化,前加“c”,后去“.h”
//在C++中使用C语言的头文件,以上两种都可以,尽量使用后者,具备C++风格化的写法;

#pragma warning(disable:4996) 
//加上这一行是因为:
        // Windows环境下需要使用strcpy_s(),Linux环境下需要使用strcpy()
        // 或者标识忽略这个错误,#pragma warning(disable:4996) Windows环境下也可以直接使用strcpy()

//string.h只是为了表示如何引用C头文件,有了cstring,string.h加不加无所谓
extern "C" {
#include <string.h> //如果需要在C++中调用C语言的接口,使用关键字extern
}

using namespace std;
//相当于全局定义,后面所有未声明命名空间的标识符默认使用std空间

int main()
{
    //cout 输出 类似 c语言的printf
    //endl 类似 c语言的  换行符
    // printf("Hello 你好!\n");

    //cout代表的输出设备
    cout << "Hello, the meal is now completed on the 54th and ready for departure!" << endl;//将字符串输出到 控制台
    cout << "Please show me your pick-up number:" << endl;

    //cin代表的是输入设备
    int number = 0;
    cin >> number;//将建键盘输入的数据 赋值给 number
    cout << "number = " << number << endl;
    //如果没有声明using namespace std; 就需要加std::cout / cin

    char buf[128] = "";
    strcpy(buf, "Wishing you a pleasant meal!");   //strcpy把含有'\0'结束符的字符串复制到另一个地址空间buf元素
    cout << buf << endl;                           //Wishing you a pleasant meal!  /**buf表示数组地址对应的元素,buf是元素*/
    cout << buf[0] << buf[3] << endl;              //Wh                            /**数组格式表示对于节点元素*/
    cout << &buf << endl;                          //0x7fffe7c5acc0                /**整个数组的地址*/
    cout << *(& buf) << endl;                      //Wishing you a pleasant meal!  /**整个数据地址对应的元素*/

    return 0;
}
strcpy(buf, "Wishing you a pleasant meal!");   
//strcpy把含有'\0'结束符的字符串复制到另一个地址空间buf元素

一维数组:buf[128]
buf         //Wishing you a pleasant meal!   /**buf表示数组地址对应的元素,buf是元素*/
buf[0]      //W                             /**数组格式表示对于节点元素*/
&buf        //0x7fffe7c5acc0                 /**整个数组的地址*/
*(& buf) //Wishing you a pleasant meal! /**整个数据地址对应的元素*/

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

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

相关文章

火山引擎DataLeap的Data Catalog系统公有云实践 (上)

更多技术交流、求职机会&#xff0c;欢迎关注字节跳动数据平台微信公众号&#xff0c;回复【1】进入官方交流群 前言 Data Catalog 通过汇总技术和业务元数据&#xff0c;解决大数据生产者组织梳理数据、数据消费者找数和理解数的业务场景。本篇内容源自于火山引擎大数据研发治…

《合成孔径雷达成像算法与实现》Figure2.18与2.20

代码复现如下&#xff1a; xlinspace(-20,20,32); ylinspace(-20,20,32); SINC_1zeros(length(x),length(y)); for i1:length(x)for j1:length(y)SINC_1(i,j)sinc(x(i))*sinc(y(j));end end%SINC_1imrotate(SINC_1,8,bilinear,crop); %Zfftshift(fft2(SINC_1)); Zfft2(SINC_1)…

[Python进阶] 元类metaclass(type类)及object类

4.9 元类metaclass(type类)及object类 4.9.1 object类 在面向对象编程中&#xff0c;类是对象的蓝图或模板。类定义了一组属性和方法&#xff0c;并且根据该模板可以创建新的对象。由于每个对象都是基于类来创建的&#xff0c;因此它们共享相同的属性和方法。 object类是一个…

Docker私有仓库部署与管理

目录 Docker--harbor Harbor 简介 Harbor 部署 1. 部署 Docker-Compose 服务 2. 部署 Harbor 服务 维护管理Harbor 1. 通过 Harbor Web 创建项目 2. 创建 Harbor 用户 3. 查看日志 4. 修改 Harbor.cfg 配置文件 5. 移除 Harbor 服务容器同时保留镜像数据/数据库&…

解析数字孪生的现在和未来

数字孪生是一种将现实世界与数字世界相连接的技术&#xff0c;它可以通过建立数字化的物理模型来模拟和预测现实世界的行为和性能&#xff0c;随着技术的成熟逐渐在越来越多行业得以应用&#xff0c;那有没有人好奇数字孪生是怎么来的呢&#xff1f;今天就带大家来盘一盘数字孪…

Unity中的MonoBehaviour 及其生命周期

关于MonoBehaviour 类的类图的详细介绍&#xff1a; Unity中的MonoBehaviour脚本-基础知识和继承关系_拂面清风三点水的博客-CSDN博客 关于MonoBehaviour 类的生命周期&#xff1a; Unity - Manual: Order of execution for event functions&#xff1a; Awake&#xff1a;当…

脑电信号处理与特征提取——5.频谱分析和时频分析(张治国)

目录 五、频谱分析和时频分析 5.1 频谱估计 5.1.1 基本概念 5.1.2 频谱估计方法&#xff1a;周期图 5.1.3 频谱估计方法&#xff1a;Welch法 5.1.4 频谱估计方法的比较 5.1.5 频谱特征提取 5.2 时频分析 5.2.1 短时傅里叶变换 5.2.2 连续小波变换 5.3 事件相关同步…

24考研数据结构-线性表6

目录 2.4.8 静态链表2.4.9 顺序表和链表的比较2.4.9.1 逻辑结构2.4.9.2 存储结构2.4.9.3 基本操作 - 创建2.4.9.4 基本操作 - 销毁2.4.9.5 基本操作-增/删2.4.9.6 基本操作-查2.4.9.7 顺序、链式、静态、动态四种存储方式的比较2.4.9.8 存储密度的问题2.4.9.9 存储方式的选择以…

产品需求、系统架构设计经验篇

需求设计思维导图UML 建模原型规范什么样的需求该忽略1.拍拍脑袋得来的想法&#xff0c;往往是没用的2.用户反馈的信息&#xff0c;不应该直接纳入需求3.扭改用户习惯的需求&#xff0c;一律不考虑 什么样的需求该重视1.从运维系统中根据数据结果分析得出的结论2.重视有洞见者的…

pandas pivot_table数据透视表、MultiIndex多级索引创建

参考&#xff1a; https://blog.csdn.net/ljr_123/article/details/115250639 1、 pivot_table数据透视表 import pandas as pd# 创建示例数据 data {Year: [2019, 2019, 2020, 2020, 2019, 2019, 2020, 2020],Quarter: [Q1, Q2, Q1, Q2, Q1, Q2, Q1, Q2],Product: [A, A, A…

解密数字孪生:解决实际问题的神奇技术

数字孪生是一种将现实世界与数字世界相连接的创新技术&#xff0c;通过将实际物体或系统的数据和行为模拟到数字平台上&#xff0c;实现真实与虚拟之间的交互和信息共享。数字孪生的应用不仅仅局限于虚拟现实&#xff08;VR&#xff09;和仿真领域&#xff0c;它在解决实际问题…

pytorch实现梯度下降算法例子

如题&#xff0c;利用pytorch&#xff0c;通过代码实现机器学习中的梯度下降算法&#xff0c;求解如下方程&#xff1a; f ′ ( x , y ) x 2 20 y 2 {f}(x,y) x^2 20 y^2 f′(x,y)x220y2 的最小值。 Latex语法参考&#xff1a;https://blog.csdn.net/ViatorSun/article/d…

【雕爷学编程】Arduino动手做(87)---ULN2003步进电机模组2

37款传感器与执行器的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&am…

openAI API使用教程、openai.Completion.create() 详细解释一下

openAI提供了几种不同场景的模型,主要有text completion、code completion、chat completion、image completion,例如chat completion,则调用方式为。而且请求的token和回复的token数会被加一起计费,例如说输入了10个token,openAI回复了20个token,那么最终收费是按照30个…

微信登录账户文件、聊天信息存储转移(存储空间足够、想保留历史聊天记录、文件)

1、打开电脑版微信、点击左下角的三根横线 2、点击左侧的“设置” 3、弹出层左侧点击“文件管理” 4、记录历史存储路径验证使用 历史默认存储位置“./我的文档/WeChat Files” 5、在其他存储空间充足盘符创建存储路径&#xff08;也可在 步骤7过程创建&#xff09; 具体位…

SpringBoot开发小技巧使用(DEBUG、启动图标修改、Lombok、devtools、Spring Initializr)

目录 1. 通过DEBUG查看自动配置的组件2. springboot启动图标修改3. Lombok4. devtools5. 通过IDEA的Spring Initializr快速创建新项目 1. 通过DEBUG查看自动配置的组件 在resources/application.properties中添加如下&#xff0c;开启DEBUG功能&#xff1a; debugtrue然后启动…

.Net Core 6.0依赖注入

.Net Core 6.0依赖注入 往期文章&#xff1a; .ner Core实现接口限流.net Core程序发布到IIS(Window Server 2019) 文章目录 .Net Core 6.0依赖注入前言一、ICO 和DI和DLICO [控制反转]DI [依赖注入]DL [依赖查找] 二、.net Core 中的依赖注入【Autofac】瞬时模式作用域模式单…

中文输入法开发-关键代码

续上篇介绍了嵌入式Linux下中文输入法&#xff0c; 嵌入式Linux下开发中文输入法_嵌入式输入法_小刚学長的博客-CSDN博客 本篇继续介绍核心关键功能 展现效果图如下&#xff1a; 1、如何跟应用关联起来&#xff0c;比如说&#xff0c;希望当LineEdit 输入状态激活后&#xff0…

怎么清空回收站?3个方法轻松搞定!

有没有大佬知道该怎么清空回收站呀&#xff1f;想把回收站清空了不知道该如何操作&#xff01;求一个清空方法&#xff01;感谢大家啦&#xff01; 电脑的回收站会为我们保存一些删除的数据&#xff0c;如果我们删除文件后意识到这些文件仍然是有用的&#xff0c;可以利用回收站…

报考CDGP一定要先有CDGA证书吗?

据DAMA中国官方网站消息&#xff0c;2023年度第三期DAMA中国CDGA和CDGP认证考试定于2023年9月23日举行&#xff0c;报名通道现已开启。 最近好多想报名CDGP认证考试的朋友都来咨询考试报名事宜&#xff0c;其中有一个重合度很高的问题“报考CDGP一定要先有CDGA证书吗&#xff…