简说C++学习-第一章C++语言概述

2023-11-07

简说C++学习-第一章C++语言概述

1.C++语言的发展

1972年,贝尔实验室在B语言的基础上,做了进一步的充实和完善,设计出了C语言。

C语言的优点:

  • 语言简洁,使用灵活、方便。
  • 具有丰富的运算符和数据类型。
  • 可以进行低级操作,适合开发系统软件。
  • 程序的运行效率高。
  • 代码可移植性好。

C语言的缺点:

  • 类型检查机制较弱。
  • 缺少支持代码复用的语言结构。
  • 不适合大型软件开发。

1980年,贝尔实验室在C语言的基础上,引入面向对象的特征,开发出一种过程性与对象性相结合的程序设计语言。最初称为"带类的C",1983年取名为C++。

2.C++语言的特点

C++语言的特点

  • C++是一种面向对象的程序设计语言

  • 面向对象是不同于面向过程的一种编程思想,其特点主要体现在:

    • 封装和信息隐藏。——封装性

    • 以继承和派生方式实现程序的重用。——派生性

    • 以函数重载和虚函数来实现多态性。——多态性

    • 以模板来实现类型的参数化。

      • 一般的高级程序设计语言是由计算机科学家在科研和教学环境中设计出来的。但是C++语言却是由 从事实际系统开发工作的程序员在实践中创造的。因此C++语言往往从编写实际程序的角度出发,为程序员提供了各种实用、灵活、高效的语言特性。
  • C++语言是C语言的超集

    • C++语言包含了C语言的全部语法特性。由于C++语言很好地兼容了C语言,因此,C++语言具有明显的优势,具体如下:

      • C++语言继承了C语言简明、高效、灵活等众多优点。
      • 以前使用C语言编写的大批软件可以不加任何修改,可以直接在C++语言开发环境下维护。
      • C语言程序员只需要学习C++语言扩充的新特性,就可以很快地使用C++语言编写程序。

3. 面向对象程序设计

C++语言是一种面向对象的程序设计语言,支持面向对象思想中的3个主要特征:封装性、继承性、多态性。

  • 封装性:封装性指将数据和算法捆绑成一个整体,这个整体就是对象,描述对象的数据被封装在其内部。

    • e.g1.使用者不必知道一部手机内部电路的具体构造和工作原理,就可以用它来打电话,发短信。
  • 继承性:继承性指一种事物保留了另一种事物的全部特征,并在无需重新编写原来的类的情况下对这些功能进行扩展。

    • e.g2. 麻雀具有鸟类动物的所有特征,这种生理特性,称为继承。
  • 多态性:多态性是指当多种实物继承自一种事物时,同一种操作在他们之间表现出不同的行为。

    • e.g3. "麻雀"继承了"鸟类"动物的所有特征,"画眉鸟"同样也继承了"鸟类"动物的特征。但是"麻雀"和"画眉鸟"却有完全不同的行为,这就是我们现实中出现的多态性。
    • 它使用函数重载、模板、虚函数来支持多态性。

4.C++语言的词汇

C+语言只有5中合法词汇:关键字、标识符、字面常量、运算符、标点符号。

  • 关键字

    • 关键字也称为保留字,C++语言中关键字一共有61个,包括ANSI C标准规定的32个关键字,ANSI C++标准补充的另外29个关键字,每个关键词在C++语言中都有特殊的含义和一定的功能,不能作为其他词汇使用。
  • 标识符

    • 标识符是用户为程序中各种需要命名的"元素"所起的名字。这些"元素"包括类、对象、结构、变量、符号常量、函数、函数的参数等。标识符的组成要符合如下的规则:
      • 标识符是一个以字母或下画线开头的,由字母、数字、下画线组成的字符串。
        • e.g1. count、_PI、_342JIJIN都是合法的标识符。
      • 标识符不能与任意一个关键字同名
        • e.g2. 2.sizeof、new等。
      • 标识符中的字母区分大小写。
        • e.g3. PI与pi是不同的标识符。
      • 标识符的有效长度为32个字符
        • 如果程序中的标识符超过这个长度,超出的部分被忽略不计。
  • 字面称量

    • 常量是指在程序中固定不变的值。常量一般有两种表示形式,即字符常量和字面常量。字面常量分为整型、浮点型、字符型和字符串型4类。
      • e.g4. 整型123、浮点型123.456、字符型'a'、字符串"hello"。
  • 运算符

    • 运算符是对程序中的数据进行操作的一类单词。C++语言中运算符有以下4种。
      • 单字符组成的运算符
        • e.g5. +,-,*,/等。
      • 双字符组成的运算符
        • e.g6. <<,<=,&&等。
      • 3个字符组成的运算符
        • e.g7. <<=,>>=等。
      • 关键字运算符
        • e.g8. new,delete,sizeof等。
  • 标点符号

    • 标点符号是在程序中起分隔内容和界定范围作用的一类符号。C++语言的标点符号包括:
      • (空格)语句中各成分之间的分隔符
      • ;(分号)语句的结束符
      • ’(单引号)字符常量的起止标记符
      • "(双引号)字符串常量的起止标记符
      • #(井字号)预处理命令的开始标记符 //#include; #define
      • {(左花括号)复合语句的开始标记符
      • }(有话括号)复合语句的结束标记符
      • //(双斜杠)行注释的开始标记符
      • /*(斜杠和型号)块注释的开始标记符
      • */(星号和斜杠)块注释的结束标记符
  • C++的开发过程

    • 编辑
      • 编辑是C++程序开发过程的第一步,主要包括文本的输入和修改。Visual C++2010是最常用的C++集成开发环境。当完成了C++程序的编辑后,应将输入的程序文本保存为以.cpp为扩展名的文件,头文件应以.h为扩展名。
    • 编译
      • 编译时由源程序文件转换到目标文件的过程。在Visual C++2010集成开发环境中,可以使用编译命令将一个.cpp文件转换成一个.obj的目标文件。
    • 链接
      • 链接是将目标代码(.obj文件)变成可执行程序(.exe文件)的过程。在Visual C++2010集成开发环境中,可以使用生成命令进行链接。
    • 运行和调试
      • 运行可执行程序,查看运行结果。在Visual C++2010集成开发环境中,用户可以很方便地进入调试状态,对程序进行设置断点、单步执行、观察变量等操作。

练习题

1.C++语言对C语言做了很多改进,C++语言相对于C语言的最根本的变化是()。
A. 增加了一些新的运算符
B.允许函数重载,并允许设置默认参数
C.规定函数说明符必须用原型
D.引进了类和对象的概念

D【解析】C++语言最重要的特点是其为一种面向对象的程序设计语言,但是C++语言也包含了C语言的全部特征。

2.与C语言相比,C++语言在求解问题方法上进行的最大改进是()。
A. 逐步求精
B. 面向过程
C.面向对象
D.代码复用

C【解析】C语言是面向过程的,C++是面向对象的,C++兼容C,公认最大改进是C++面向对象的特性。C语言面向过程的,代码复用是一种技术,C和C++都可。因此A,B,D,不是C++的专有特点。故答案为C选项。

3.下列选项中,能体现面向对象思想主要特征的是()。
A. 递归
B. 函数
C.循环
D.封装

D【解析】面向对象思想主要特征有:封装、继承、多态,选项D正确。本题答案为D。

4.下列选项中,不属于C++关键字的是()。
A. byte
B. namespace
C.enum
D.union

A【解析】选项B是命名空间的关键字,正确;选项C是枚举类型的说明符,是关键字,正确;选项D是联合体类型的说明符,是关键字,正确;选项A表示字节,是存储空间大小的表示单位,不属于关键字,错误,本题答案为A。

5.下列选择中,不属于C++关键字的是()。
A. namespace
B. public
C. struct
D. abstract

D【解析】namespace是定义命名空间的关键字,选项A正确;public关键字在类定义体中指定公共成员,在类继承体系中指定公有继承,选项B正确;struct关键字定义结构体类型,选项C正确;abstract不属于C++关键字,选项D错误。故本题答案为D选项。

6.用于定义类的必不可少的C++关键字是()。
A. auto
B. return
C.class
D.public

C【解析】本题定义类的基础知识,定义类时使用的关键字为class,所以C选项正确。

7.以下关键字用来声明类的访问权限的是()。
A. const
B. static
C.protected
D.case

C【解析】C++中,关键字publicprotectedprivate用来声明类的访问权限,答案为C。

8.在下列关键字中,不能用来表示继承方式的是()。
A. private
B. static
C.public
D.protected

B【解析】三种继承方式:公用继承、私有继承和保护继承分别使用publicprivateprotected 三个关键字来定义。故本题答案为B选项。

9.下列语句中错误的是()。
A. const int *p = 0;
B. const int y = 99;
C.const int x;
D.const int *p = new int (100);

C【解析】const是一个C++语言的关键字,它限定一个变量不允许被改变,C++定义const类型变量时必须初始化,否则编译不通过。所以C选项错误。

10.下列字符中,可以出现在合法的C++标识符中的是()。
A. :
B. ~
C.&
D.1

D【解析】C++的标识符由字母、数字和下划线组成,A、B、C错误,答案为D。

11.下列符号中,正确的C++标识符是()。
A. enum
B. 2b
C.foo-9
D._32

D【解析】本题考查C++标识符的命名规则,规定如下:①所有标识符可以由字母、数字和下画线组成,且必须以字母或下画线开头;②C++的关键字不能作为标识符;③大、小写字母表示不同意义,即代表不同的标识符,如mun和Mun。A选项是C++的关键字,B选项不能以数字开头,C选项“-”不能用于组成标识符。故本题答案为D选项。

12.Windows环境下,由C++源程序文件编译而成的目标文件的拓展名是()。
A. o
B. obj
C.exe
D.h

B【解析】A选项中,o是linux环境下编译后的目标文件的扩展名;C选项中,exe是windows环境下程序链接之后的可执行文件的扩展名;D选项中,h是源程序头文件;答案为B。

13.下列选项中,不属于C++程序开发步骤的是()。
A. 编辑
B. 编译
C.链接
D.解释

D【解析】C++程序开发步骤分为:编辑、编译、链接、运行,本题答案为D。

在这里插入图片描述

-----------------------------------------------------------第一次发文希望大家多多支持---------------------------------------------------------

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

简说C++学习-第一章C++语言概述 的相关文章

  • C++ 模板中的名称查找

    我有一些 C 代码 如果没有 fpermissive 选项 就无法再编译 这是我无法分享的专有代码 但我认为我已经能够提取一个简单的测试用例来演示该问题 这是 g 的输出 template eg cpp In instantiation o
  • OpenCV Visual Studio ntdll.dll

    我尝试在 Visual Studio 2013 上使用 OpenCV 2 4 10 创建一个项目 但由于以下异常 到目前为止我运气不佳 请建议帮助 TIA letstryitonemoretime exe Win32 Loaded C Us
  • asp.net c# 将数据集中的数据转换为电子邮件正文?

    从数据集到电子邮件正文的最佳方式是什么 我有一个 net 控制台应用程序 用于根据存储过程的结果发送电子邮件通知 并且想知道如何最好地从 SQL 数据转到电子邮件正文 带有颜色和字体的 html 正文是最好的 但纯文本也可以 thanks
  • CMake 和 Visual Studio:如何获得快速、安静的命令行构建?

    我有一个 cmake 项目 它成功地完成了我想要的一切 但我有大约 100 个文件 当我只需要重新编译一个文件时 我厌倦了每次看到生成的巨大输出 每个文件 30 行 明确地说 我正在编译cmake build 得到这个结果 我需要传递给编译
  • 避免集合已修改错误

    Issue 我有以下代码 foreach var ItemA in GenericListInstanceB ItemA MethodThatCouldRemoveAnyItemInGenericListInstanceB 显然我得到一个错
  • C++ 非类型参数包扩展

    我正在编写由单一类型参数化的模板函数 并且具有可变数量的相同类型 而不是不同类型 的参数 它应该检查第一个值是否在其余值中 我想这样写 include
  • 基于 MS Bot Framework 中的响应分支对话框/表单

    我们正在尝试使用 MS Bot Framework 但尚未完全弄清楚如何实现此场景 我们有一个 LUIS 对话框 类型 它工作正常并且经过适当的培训 以常见的三明治为例 LUIS 意图寻找的基本内容是用户询问订单状态 如果问题中提供了订单号
  • 有没有办法使 C90 标准中的枚举无符号? (符合 MISRA-C 2004 标准)

    我正在尝试找到一种使枚举 无符号 的方法 enum x1 0 x2 x3 uint8 t x2 lt PC LINT MISRA C 2004 will complain about mixing signed and unsigned h
  • async wait 在调用异步方法时返回 Task> 而不是 List

    我正在尝试了解 async wait 的用法 并且研究了一些博客文章 现在我已经编写了一个测试代码 但它没有按照我期望的方式工作 我有一个返回列表的方法 private List
  • 如何在 C++ 中对静态缓冲区执行字符串格式化?

    我正在处理一段对性能要求非常高的代码 我需要执行一些格式化的字符串操作 但我试图避免内存分配 甚至是内部库的内存分配 在过去 我会做类似以下的事情 假设是 C 11 constexpr int BUFFER SIZE 200 char bu
  • 正则表达式删除某些字符周围不需要的空格

    我正在尝试从 JavaScript 文件中删除一些不需要的空格 并在将文件发送到客户端之前使用 C 和 Regex 组合文件 我有一个JavascriptHandler处理 js 文件 效果很好 这是我用来 打包 JavaScript 的函
  • 控制器中的异常处理 (ASP.NET MVC)

    当您自己的代码抛出异常并从控制器中的操作调用时 应该如何处理 我看到很多最佳实践的例子 其中根本没有 try catch 语句 例如 从存储库访问数据 public ViewResult Index IList
  • 以标准用户身份打开默认浏览器 (C++)

    我目前正在使用 ShellExecute 打开 在用户浏览器中打开 URL 但在 Win7 和 Vista 中遇到了一些麻烦 因为该程序作为服务运行提升 当 ShellExecute 打开浏览器时 它似乎读取 本地管理员 配置文件而不是用户
  • Scrapy FakeUserAgentError:获取浏览器时发生错误

    我使用 Scrapy FakeUserAgent 并在我的 Linux 服务器上不断收到此错误 Traceback most recent call last File usr local lib64 python2 7 site pack
  • Active Directory UserPrincipal.Current.GetGroups() 返回本地组而不是 Web 服务器上的组

    以下内容在我的本地开发盒上效果很好 但是 当我将其移动到网络服务器时 它失败了 甚至不会记录错误 public static List
  • 如何查明 Ubuntu 上安装了哪个版本的 GTK+?

    我需要确定 Ubuntu 上安装了哪个版本的 GTK 男人似乎不帮忙 这个建议 https stackoverflow com a 126145 会告诉您安装了哪个 2 0 的次要版本 不同的主要版本将具有不同的包名称 因为它们可以在系统上
  • C 的“char”使用什么字符集? [复制]

    这个问题在这里已经有答案了 简单的问题 我最近开始用 C 编程 有一个简单的问题 C 编程语言在其 char 类型中使用什么字符集 例如 ASCII 还是取决于软件 操作系统 char 本质上是 1 个字节 主要在所有操作系统上 所以默认情
  • C 中什么函数可以替换字符串中的子字符串?

    给定一个 char 字符串 我想查找所有出现的子字符串并将其替换为备用字符串 我没有看到任何简单的函数可以实现这一点
  • win32 API 和 .NET 框架之间的选择

    我必须开发一个适用于 Windows 的应用程序 该应用程序将能够通过网络摄像头识别手势来控制鼠标 我将使用 vc 2008 进行开发 但我很困惑是使用 NET 框架还是核心 win32 API 性能对于我的应用程序非常重要 根据 Ivor
  • C/C++ 通过 Android NDK 在 JNI 中看不到 Java 方法

    我正在尝试从使用 NDK 构建的 C 类文件调用 Java 方法 它不断抛出常见的 未找到非静态方法 错误并导致整个 Android 应用程序崩溃 下面的代码片段 有些东西可能不需要 但我按原样保留它们 因为焦点 问题在于refreshJN

随机推荐

  • PyTorch使用LMDB数据库加速文件读取

    PyTorch使用LMDB数据库加速文件读取 文章目录 PyTorch使用LMDB数据库加速文件读取 背景介绍 具体操作 LMDB主要类 lmdb Environment lmdb Transaction Imdb Cursor 操作流程
  • mybatisPlus-wrapper使用

    创建测试类 import com baomidou mybatisplus core conditions query QueryWrapper import com plus mybatis mapper UserMapper impor
  • 思科模拟器静态路由

    网络拓扑图 Router0配置 Router2配置 Multilayer Switch0配置 Switch0配置 Switch2配置 主机PC0配置 202 199 1 2 255 255 255 0 202 199 1 1 主机PC1配置
  • LDAP: error code 32 - No Such Object

    使用spring ldap创建节点的时候报错 LDAP error code 32 No Such Object 是在调用 this ldapTemplate create ldapUser 的时候报的错 找了半天没有发现原因 最后看到一篇
  • JavaScript整理

    第一章 JavaScript概述 1 1 JavaScript简介 JavaScript 简称js 是一种直译式脚本语言 是一种动态类型 弱类型 基于原型的语言 内置支持类型 它的解释器被称为JavaScript引擎 为浏览器的一部分 广泛
  • ajax请求和普通请求的区别

    当浏览器按照window location href index html 进行定期请求时 会清除当前窗口并将服务器响应加载到窗口中 使用ajax请求 当前窗口 文档不受影响 JavaScript代码可以检查请求的结果 并使用这些结果执行所
  • 一些黑科技接口钩子 钉钉,禅道,gitlab,jenkins等

    日常工作中需要做流程的串联 这个时候就需要掌握一些黑科技接口 这些接口甚至是官方文档上并没有提供的 但是我们确实可以使用 进行内部工具开发的一定要记得提供钩子 没有钩子 做不了朋友 钉钉相关 钉钉群中的自定义机器人 curl https o
  • C/C++在线编译器

    一直以来都喜欢用手机看书 尤其是在上班时 看的最多的是编程一类的书 主要是C 看着就想写写代码 可是电脑用不能用 怎么办 于是想到用UC浏览器找找看网上有没有在线的编译器 想什么时候写代码都可以验证 于是就找了几个 各有千秋吧 中文的我没找
  • 在地址栏中输入一段内容,接下来都发生了些什么

    用户发出 URL 请求到页面开始解析的这个过程 就叫做导航 用以定位到新资源 并且将老的资源从页面卸载 一 用户输入 地址栏首先判断输入的内容是搜索内容还是符合url规则的url 如果是搜索内容的话 浏览器会拼接上该搜索内容形成一个新的ur
  • mybatis-plus

    mybatis plus的sql拼接规则 实体对象参数属性有值 那么该属性名会拼接sql语句中 实体对象参数属性为基本属性时 会有默认值 mybatis plus认为是有值 参与sql拼接 mybatis plus与mybatis的对比 m
  • 3d指向检测 ros_3d_pointing_detection

    Introduction The workflow of this project is Detect 2D human joints from color image by Openpose Compute 3D human joints
  • stopPropagation, preventDefault 和 return false 的区别

    http blog csdn net bkq421511585 article details 14166789
  • 使用Docker拉起ES容器和Kibana容器并设置密码Demo

    1 准备条件 安装好docker 在同一台服务器上安装es和kibana 安装docker命令参考 可以按顺序执行如下命令安装 1 sudo yum install y yum utils 2 sudo yum config manager
  • 做擦边网站 服务器放在狗爹,在GoDaddy搭建Prosper202服务器

    记录一下我在GoDaddy搭建Prosper202服务器的过程 1 首先 我购买的是Liunx Deluxe共享虚拟主机 狗爹这个类型的产品可以建多个网站 我有一个域名 www网站已经上线 虽然还没有什么内容 2 为你的Prosper202
  • add_library使用 $<TARGET_OBJECTS:name>

    一 背景 前面介绍了add library的两种格式 今天分享一个实例 Cmake分别生成静态链接库 OBJ链接库 并使用
  • 人人商城小程序消息服务器配置,人人商城小程序订阅消息设置方法和几个坑!...

    操作步骤 第一步 开通订阅消息功能 登录微信小程序官网后台 mp weixin qq com 开通订阅消息 第二步 服务类目 新增 商家自营 gt 服装 鞋 箱包 第三步 添加订阅消息 4个 订阅消息 公共模板库 搜索 订单支付成功通知 编
  • Android仿小米商城底部导航栏(基于BottomNavigationBar)

    简介 现在大多数App都会用到底部导航栏 比如QQ 微信和购物App等等 有了底部导航栏 用户可以随时切换界面 查看不同的内容 Android底部导航栏的实现方式特别多 例如TabHost TabLayout 或者TextView等 都可以
  • 机器学习-支持向量机算法实现与实例程序

    一 SMO算法基础 支持向量就是离分隔超平面最近的那些点 分隔超平面是将数据集分开来的决策边界 支持向量机将向量映射到一个更高维的空间里 在这个空间里建立有一个最大间隔超平面 在分开数据的超平面的两边建有两个互相平行的超平面 建立方向合适的
  • 剑指offer总结

    时间复杂度一般比空间复杂度更重要 因为改进时间对算法的要求更高 是空间换时间 还是时间换空间 一般要看具体的应用 对于普通的应用 一般是空间换时间 因为普通用户更关心速度 而且一般有足够的存储空间允许这样操作 对于嵌入式的软件 一般我们会用
  • 简说C++学习-第一章C++语言概述

    简说C 学习 第一章C 语言概述 1 C 语言的发展 1972年 贝尔实验室在B语言的基础上 做了进一步的充实和完善 设计出了C语言 C语言的优点 语言简洁 使用灵活 方便 具有丰富的运算符和数据类型 可以进行低级操作 适合开发系统软件 程