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

本人博客园亦可见


一、认识 “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;//将建键盘输入的数据 赋值给 numbercout << "number = " << number << endl;//如果没有声明using namespace std; 就需要加std::cout / cinchar 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.mzph.cn/news/8061.shtml

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

相关文章

vue中实现列表自由拖拽排序

元素的 dragable 属性设置 为 true &#xff08;文本 图片 链接 的draggable 属性默认为 true&#xff09;则元素可拖放 <template><transition-group class"list"><uldragstart"dragstart(index)"dragenter"dragenter($event, index)…

【设计模式——学习笔记】23种设计模式——原型模式Prototype(原理讲解+应用场景介绍+案例介绍+Java代码实现)

原型模式 介绍 原型模式指用通过拷贝原型实例创建新的实例&#xff0c;新实例和原型实例的属性完全一致原型模式是一种创建型设计模式工作原理是通过调用原型实例的 clone()方法来完成克隆&#xff0c;原型实例需要实现Cloneable接口&#xff0c;并重写clone()方法需要为每个…

naive-ui的dialog.warning 关闭和阻止关闭

序&#xff1a; 1、如果你卡到 了&#xff0c;博主没写博客&#xff0c;可以在博主的公众号&#xff1a;“程序员野区” 留言。博主看到有时间再帮你去试 2、博主主要讲的怎么 主动关闭dialog和阻止dialog 自动关闭。 注意&#xff01;&#xff01;&#xff01;&#xff01;来&…

Spring Data Redis操作Redis

在Spring Boot项目中&#xff0c;可以使用Spring Data Redis来简化Redis操作&#xff0c;maven的依赖坐标&#xff1a; <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></…

5分钟搞懂池化的本质

大家好啊&#xff0c;我是董董灿&#xff01; 在很多与计算机视觉相关的神经网络中&#xff0c;我们往往都会看到池化这一算法&#xff0c;它一般跟在卷积层后面。 神经网络中用到最多的池化方式无外乎是最大池化和平均池化。两者运算接近&#xff0c;区别在于是在kernel范围…

在使用《快递批量查询高手》时从TXT文本导入的快递单号出现乱码如何解决。

在日常 工作中&#xff0c;有没有单号用TXT 文档保存吗&#xff1f;那么没有出现这种情况呢&#xff0c;打开TXT文档进去看都是正常没有问题&#xff0c;一但导入软件中就出现乱码的&#xff1f;遇到这个种情况需要什么解决呢&#xff1f;小编今天就教 您一招解决好方法&#x…

电脑微信空间占用简便清理

1、打开电脑版微信、点击左下角的三根横线 2、点击左侧的“设置” 3、弹出层左侧点击“通用设置”->“存储空间管理” 4、点击清理缓存&#xff0c;或者管理 5、点击“管理”后&#xff0c;根据选择的筛选条件&#xff0c;勾线需要清理的&#xff0c;最后点击清理

WormGPT – 网络犯罪分子用来犯罪的人工智能工具

WormGPT – 网络犯罪分子用来发起商业电子邮件泄露攻击的生成式人工智能工具 前言 什么是蠕虫GPT&#xff08;WormGPT&#xff09; WormGPT是基于EleutherAI于2021年创建的大型语言模型GPT-J的AI模型。它具有无限的字符支持、聊天记忆保留和代码格式化功能。 如果未部署适当…

C#|无法打开cs文件设计窗口

报错信息&#xff1a;To prevent possible data loss before loading the designer, the following errors must be resolved: 解决方案&#xff1a;实不相瞒我把项目解决方案名称改短了就可以了。。有其他原因或者解决方案望不吝赐教。。

electron dialog.showMessageBox使用案例

electron 版本&#xff1a;25.3.1 index.html <!DOCTYPE html> <html> <head><meta charset"UTF-8"><title>Hello World!</title><meta http-equiv"Content-Security-Policy" content"script-src self unsa…

计算机视觉(三)未有深度学习之前

文章目录 图像分割基于阈值、基于边缘基于区域、基于图论 人脸检测Haar-like特征级联分类器 行人检测HOGSVMDPM 图像分割 把图像划分成若干互不相交的区域。经典的数字图像分割算法一般是基于灰度值的两个基本特征之一&#xff1a;不连续性和相似性。 基于阈值、基于边缘 基于…

《论文阅读》具有特殊Token和轮级注意力的层级对话理解 ICLR 2023

《论文阅读》具有特殊Token和轮级注意力的层级对话理解 前言简介问题定义模型构建知识点Intra-turn ModelingInter-turn Modeling分类前言 你是否也对于理解论文存在困惑? 你是否也像我之前搜索论文解读,得到只是中文翻译的解读后感到失望? 小白如何从零读懂论文?和我一…

MySQL事务

目录 前言 1.为什么存在事务 2.什么是事务 3.事务的版本支持 4.事务提交方式 5.事务常见操作方式 6.事务隔离级别 6.1如何理解隔离性 6.2隔离级别 6.3隔离性的查看与设置 6.4读未提交 6.5读提交 6.6可重复读 6.7串行化 7.多版本并发控制 7.1 3个记录隐藏列字段…

面向对象编程:从创建类到封装与构造方法的探索

1. 代码如何创建类&#xff1f; 在面向对象编程中&#xff0c;类是对一类事物的抽象&#xff0c;包含了静态的属性&#xff08;成员变量&#xff09;和动态的行为&#xff08;成员方法&#xff09;。在Java中&#xff0c;创建类的格式如下&#xff1a; 修饰词 class 类名 {//…

办公楼管理高手:一起来学烟雾监测实用技能!

在现代社会中&#xff0c;安全意识和防患意识越来越受到重视。特别是在大型办公楼等人员密集的场所&#xff0c;火灾的风险不容忽视。 为了保障员工和资产的安全&#xff0c;烟感监控成为一项至关重要的安全措施。烟感监控系统作为火灾预警的关键组成部分&#xff0c;能够及早发…

大数据Flink(四十九):框架版本介绍和编程语言选择

文章目录 框架版本介绍和编程语言选择 一、框架版本介绍 二、编程语言选择 框架版本介绍和编程语言选择

pandas学习

(个人学习使用) 添加索引 # index是行索引&#xff0c;columns是列索引 pd.DataFrame(score, indexidx, columnscol) 常用属性和方法 data.shape # 形状 data.index # 行索引 data.columns # 列索引 data.values # 里面的值&#xff0c;结果是ndarray类型数组 …

微信存储空间清理

1、打开电脑版微信、点击左下角的三根横线 2、点击左侧的“设置” 3、弹出层左侧点击“文件管理” 4、点击右下角“打开文件夹” 5、默认4打开的为当前登录账户对应的文件夹&#xff08;建议清理路径步骤7&#xff09; 6、点击“WeChat Files”查看其他账户的文件夹&#xff0c…

智能制造RFID设备包括哪些?

智能制造是现代制造业的重要发展方向&#xff0c;其核心是数字化、网络化和智能化。而在智能制造中&#xff0c;RFID设备是一种不可或缺的技术手段&#xff0c;主要用于实现物品的识别、追踪和化管理。以下是智能制造中常用的RFID设备及其功能&#xff1a; 1、 RFID读写器 RFID…

[JAVAee]synchronized关键字

目录 1.synchronized的特性 ①互斥性 ②可重入性 2.synchronized的使用示例 ①修饰普通方法 ②修饰静态方法 ③修饰代码块 1.synchronized的特性 ①互斥性 互斥性,就像是给门上锁了一样. 当A线程使用了被synchronized修饰的代码块并对其上锁,其他线程(B线程,C线程)想要使…