当前位置: 首页 > news >正文

C++系列一: C++简介

C++入门简介

    • 1. C++语言的特点
    • 2. C++编译器
    • 3. 第一个 C++ 程序
    • 4. 总结(手稿版)

C++ 是一种高级编程语言,是C语言的扩展和改进版本,由Bjarne Stroustrup于1983年在贝尔实验室为了支持C语言中的面向对象编程而创建。C++ 既能够进行底层的系统编程,也可以进行高层次的应用程序开发。

C++ 有丰富的语法特性,包括类、虚函数、模板、多重继承、多态等等特性,可用于操作系统、网络通信、嵌入式开发、游戏开发、桌面应用程序开发、图形图像处理等领域。

1. C++语言的特点

C++语言作为一种面对对象语言,具有面向对象开发的三大特性:

  • 封装性:屏蔽内部细节,只表现外部行为。(基础)
  • 继承性:派生类继承基类属性和服务。(关键)
  • 多态性:向不同类对象发同一消息,产生不同行为。(补充)

类和对象:类是具有相同属性和服务的若干对象的集合,对象是某个类的一个实例

此外,C++语言还具有以下特点:

  • 可移植性:C++ 的代码可以跨平台运行,即一段 C++ 代码可在不同的操作系统上编译运行。这是因为 C++ 的编译器可以将源代码转换成目标代码,目标代码可在不同的机器上执行。
  • 可扩展性:C++ 支持多项编程范式,包括面向过程、面向对象和泛型编程等,这些编程范式可以让程序员以不同的方式组织代码,使得 C++ 可以适用于各种应用场景。
  • 代码重用性:C++ 支持模板和抽象类等特性,这些特性可以让程序员编写可重用的代码。在 C++ 中可定义一些通用类型或函数,然后在其他地方重复使用这些通用类型或函数。

2. C++编译器

学习 C++ 需要先安装一个 C++ 编译器。C++ 编译器可以将源代码转换成可执行文件,让程序在计算机上运行。以下是几种常见的 C++ 编译器:

  • GCC:GNU Compiler Collection 是一个自由软件的编译器,支持多种语言(其中包括 C++)。GCC 以 ANSI C 语言为基础开发,在许多 Unix 和 Linux 系统上被广泛使用。
  • Clang:Clang 是用于 C、C++、Objective-C 和 Objective-C++ 的可移植编译器前端。它是 LLVM 项目的一部分,能够生成高质量的代码和非常详细的错误信息。
  • Visual C++:Visual C++ 是微软公司推出的用于 Windows 平台的 C++ 编译器,被广泛应用于 Windows 操作系统、桌面应用、游戏开发、嵌入式系统开发等领域(下载地址)。
  • Intel C++ Compiler:Intel C++ Compiler 是 Intel 公司开发的 C++ 编译器,支持多个平台,包括 IA-32、Intel 64、IA-64、ARM 和 MIPS 等。

不同的操作系统和编译器可能有不同的安装方式和配置方法,安装过程中,需要仔细阅读安装向导和相关文档,并根据实际情况进行设置和调整。

3. 第一个 C++ 程序

(1)Hello World

打开一个文本编辑器,输入以下代码:

#include <iostream>int main()
{std::cout << "Hello, world!" << std::endl;return 0;
}

执行这个程序输出

“Hello, world!”

(2)C++文件组成

C++ 文件主要包括文件头、预处理指令、全局变量、函数定义四个部分。

  • 文件头:包含了版权声明、作者、日期等信息,通常以注释的形式出现在文件的开头。
  • 预处理指令:用来引入头文件、宏定义、条件编译等操作,对代码进行预处理。
  • 全局变量:程序中定义的在函数外部的变量被称为全局变量,可以在整个程序中访问。
  • 函数定义:C++ 程序通过不同的函数来实现不同的功能。函数的定义包括函数名、形参、函数体和返回值类型。函数定义一般放在主函数之前。

C++ 支持两种注释:单行注释多行注释。单行注释以“//”开头,直到行尾结束;而多行注释以“/”开头,“/”结尾,可跨越多行。

// 这是一个单行注释
/*
这是一个
多行注释
*/

(3).cpp文件的执行

C++ 程序是一种编译型语言,要想将程序转化成能够在计算机上执行的二进制代码,必须先将 C++ 程序源代码进行编译和链接。

.cpp 是 C++ 程序源代码文件的文件扩展名,用编辑器编写 C++ 源代码,将其保存成 .cpp 文件,.cpp文件从编辑到执行的基本流程:

  • (1)将 .cpp 文件作为源代码,使用 C++ 编译器进行编译。在编译过程中,编译器会进行词法分析、语法分析、生成中间代码等操作,并将结果保存在目标文件中。
  • (2)将生成的目标文件与库文件进行链接,生成可执行文件(即 .exe 文件)。链接的过程主要包括符号解析、重定位等操作,最终生成可以在计算机上运行的二进制代码。
  • (3)用户双击 .exe 文件或者使用命令行执行可执行文件时,操作系统会启动进程,并在进程内部执行程序。进程启动后,操作系统会将可执行文件的二进制代码装载到进程的虚拟内存空间中,然后根据程序入口点开始执行。
  • (4)程序开始执行后,首先会执行 main 函数中的代码。main 函数是程序的入口函数,因此所有的程序逻辑都应该从这里开始执行。
  • (5)程序执行完毕后,将会退出进程,并清理所占用的系统资源,例如内存、句柄等。

由于 C++ 语言的高效、快速和稳定性,它在很多行业中被广泛应用,人才需求非常大。而且学习 C++ 可以更深入地了解计算机底层的工作原理,对于想从事底层开发或优化等领域的程序员来说非常重要。

4. 总结(手稿版)

20年前学习C++语言的幼稚记录
在这里插入图片描述

相关文章:

C++系列一: C++简介

C入门简介 1. C语言的特点2. C编译器3. 第一个 C 程序4. 总结&#xff08;手稿版&#xff09; C 是一种高级编程语言&#xff0c;是C语言的扩展和改进版本&#xff0c;由Bjarne Stroustrup于1983年在贝尔实验室为了支持C语言中的面向对象编程而创建。C 既能够进行底层的系统编程…...

信通初试第一:无科研无竞赛一战上岸上海交大819学硕感悟

笔者来自通信考研小马哥23上交819全程班学员 信通初试第一&#xff1a;无科研无竞赛一战上岸上海交大819学硕感悟 原创2023-04-27 11:04通信考研小马哥 笔者来自通信考研小马哥23上交819全程班学员 本人情况&#xff1a; 本人是19届交本&#xff0c;本科成绩很差&#xff0c;…...

Spring —— Spring Boot 配置文件

JavaEE传送门 JavaEE Spring —— Bean 作用域和生命周期 Spring —— Spring Boot 创建和使用 目录 Spring Boot 配置文件Spring Boot 配置文件格式properties配置文件properties 基本语法properties 缺点 yml 配置文件yml 基本语法yml 配置不同类型数据及 nullyml 配置对象…...

Python 网络爬虫与数据采集(一)

Python 网络爬虫与数据采集 第1章 序章 网络爬虫基础1 爬虫基本概述1.1 爬虫是什么1.2 爬虫可以做什么1.3 爬虫的分类1.4 爬虫的基本流程1.4.1 浏览网页的流程1.4.2 爬虫的基本流程 1.5 爬虫与反爬虫1.5.1 爬虫的攻与防1.5.2 常见的反爬与反反爬 1.6 爬虫的合法性与 robots 协议…...

2023年6月DAMA-CDGP数据治理专家认证请尽快报名啦!

目前6月DAMA-CDGP数据治理认证考试开放报名地区有&#xff1a;北京、上海、广州、深圳、长沙、呼和浩特。 目前南京、济南、西安、杭州等地区还在接近开考人数中&#xff0c;打算参加6月考试的朋友们可以抓紧时间报名啦&#xff01;&#xff01;&#xff01; 5月初&#xff0c;…...

STM32+esp8266,让你的STM32开发板连接网络-----esp8266

分享一下&#xff0c;STM32开发板连接网络的第一种方法&#xff1a;连接esp8266。 esp8266与STM32利用串口通信连接&#xff0c;esp8266连接网络&#xff0c;把收到的数据通过串口的方式传输给STM32&#xff0c;之后STM32接收到消息做出对应的反应。 使用到的开发板如图&…...

分布式缓存的基础知识

前言 现代互联网应用中&#xff0c;分布式缓存成为了必不可少的一环。它通过在多台服务器之间共享数据&#xff0c;避免了网络通信的高延迟和低带宽的性能问题。本文将介绍分布式缓存的基础知识&#xff0c;包括缓存机制、常见的缓存策略以及缓存的使用场景。 缓存机制 缓存是…...

Vue3通透教程【七】生命周期函数

文章目录 🌟 写在前面🌟 生命周期钩子函数🌟 组合式API生命周期🌟 写在最后🌟 写在前面 专栏介绍: 凉哥作为 Vue 的忠实 粉丝输出过大量的 Vue 文章,应粉丝要求开始更新 Vue3 的相关技术文章,Vue 框架目前的地位大家应该都晓得,所谓三大框架使用人数最多,公司选…...

《“裸奔”时代的网络防护:如何保护你的隐私和数据安全》

一、引言 在此时此刻&#xff0c;你可能正在使用电子设备阅读这篇文章。你可能在一天中的大部分时间都在与网络世界互动&#xff0c;无论是通过电子邮件、社交媒体、在线购物&#xff0c;还是通过流媒体服务消费内容。然而&#xff0c;你有没有考虑过&#xff0c;当你在享受这些…...

mapreduce优化方法

1&#xff09;数据输入&#xff1a; 1&#xff09;合并小文件&#xff1a;在执行mr任务前将小文件进行合并&#xff0c;大量的小文件会产生大量的map任务&#xff0c;增大map任务装载次数&#xff0c;而 任务的装载比较耗时&#xff0c;从而导致 mr 运行较慢。 2&#xff09;…...

06-nexus搭建Docker私仓

使用nexus创建docker私有仓库 Nexus的安装请参考该文档&#xff1a;https://www.yuque.com/tmfl/pom/uumrx2 Nexus配置Docker仓库步骤&#xff1b; nexus默认docker是失效的&#xff0c;需要 在security --> Realms&#xff0c;将docker配置成Active在 Repository 的 Blo…...

【RS专题】eval层混淆和逻辑完整分析 - 扣代码终结篇

如有侵权、联系本人下架 首先明确一下目标,我们要先获取网页200的源代码,RS5代第一次响应为412,第二次为200。如果是200就表示正常 以下为某 yjj RS5请求成功的结果,具体流程请看完文章,源-码–答-案也会在末 尾公 布 前面是定义了非常多和函数,一直往下拉,直到出现v…...

基于matlab使用主动声纳系统进行水下目标检测

一、前言 此示例演示如何模拟具有两个目标的主动单基地声纳方案。声纳系统由各向同性投影仪阵列和单个水听器元件组成。投影仪阵列呈球形。反向散射信号由水听器接收。接收到的信号包括直接和多路径贡献。 二、水下环境 在浅水环境中&#xff0c;声源和目标之间存在多个传播路径…...

[socket]hpsocket-pull模式

为什么要用pull模式呢&#xff0c;我不是所谓的别人说pull效率高&#xff0c;是因为包头的长度 int不是固定长度。服务器IO-HPSocket PUSH&#xff1a;收到数据立马触发OnReceive&#xff0c;由开发人员自己实现拆包和缓冲区的管理逻辑。 PULL&#xff1a;收到数据立马触发OnR…...

数据分析师 ---- SQL强化(3)

数据分析师 ---- SQL强化(3) 题目&#xff1a;每个月Top3的周杰伦歌曲 从听歌流水中找到18-25岁用户在2022年每个月播放次数top 3的周杰伦的歌曲 输入例子&#xff1a; drop table if exists play_log; create table play_log (fdate date,user_id int,song_id int ); inser…...

微信小程序商品分类页最佳实践

首先我们来分析下UI小妹发来的产品原型图&#xff1a; 微信小程序商品分类页需要实现 1.单击左边的商品类目&#xff0c;右侧实现联动跳转到对应商品类目标题&#xff1b; 2.触屏拖动右侧商品列表&#xff0c;右侧跳转到对应商品类目&#xff1b; 2.分析需求我们可以把屏幕分…...

正则化解决过拟合

本片举三个例子进行对比&#xff0c;分别是&#xff1a;不使用正则化、使用L2正则化、使用dropout正则化。 首先是前后向传播、加载数据、画图所需要的相关函数的reg_utils.py&#xff1a; # -*- coding: utf-8 -*-import numpy as np import matplotlib.pyplot as plt impor…...

在 Windows 上安装 Helm包

一、前言 个人主页: ζ小菜鸡大家好我是ζ小菜鸡&#xff0c;让我们一起学习在 Windows 上安装 Helm包。如果文章对你有帮助、欢迎关注、点赞、收藏(一键三连) 二、 Helm是什么 Helm是Kubernetes的包管理工具&#xff0c;类似于centos的yum&#xff0c;能够快速查找、下载和安装…...

Clion开发STM32之OTA升级模块(一)

什么是OTA 百度百科解释个人理解&#xff1a;就是不通过烧录的方式&#xff0c;通过串口、网口、无线对主板运行的程序进行升级。减少后期的一个维护迭代程序的一个成本。 STM32的OTA升级模块的一个设计 程序启动的一个框架流程图(大致流程) FLASH的一个划分框图 BootLoader…...

Java供应链安全检测SDL方法论

近些年,开源程序陆续爆出安全漏洞,轻则影响用户体验,重则业务应用沦陷。大量的业务应用以及每天数千次的迭代,使得自动检测和治理第三方开源程序成为企业安全建设的必要一环。如何来建设这一环呢?SCA(软件成分分析) 概念 什么是SCA? 源代码或二进制扫描的软件成分分析 什…...

浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)

✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义&#xff08;Task Definition&…...

JavaSec-RCE

简介 RCE(Remote Code Execution)&#xff0c;可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景&#xff1a;Groovy代码注入 Groovy是一种基于JVM的动态语言&#xff0c;语法简洁&#xff0c;支持闭包、动态类型和Java互操作性&#xff0c…...

基于ASP.NET+ SQL Server实现(Web)医院信息管理系统

医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上&#xff0c;开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识&#xff0c;在 vs 2017 平台上&#xff0c;进行 ASP.NET 应用程序和简易网站的开发&#xff1b;初步熟悉开发一…...

3.3.1_1 检错编码(奇偶校验码)

从这节课开始&#xff0c;我们会探讨数据链路层的差错控制功能&#xff0c;差错控制功能的主要目标是要发现并且解决一个帧内部的位错误&#xff0c;我们需要使用特殊的编码技术去发现帧内部的位错误&#xff0c;当我们发现位错误之后&#xff0c;通常来说有两种解决方案。第一…...

(二)TensorRT-LLM | 模型导出(v0.20.0rc3)

0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述&#xff0c;后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作&#xff0c;其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...

转转集团旗下首家二手多品类循环仓店“超级转转”开业

6月9日&#xff0c;国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解&#xff0c;“超级…...

Caliper 配置文件解析:config.yaml

Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...

OpenLayers 分屏对比(地图联动)

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能&#xff0c;和卷帘图层不一样的是&#xff0c;分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...

Swagger和OpenApi的前世今生

Swagger与OpenAPI的关系演进是API标准化进程中的重要篇章&#xff0c;二者共同塑造了现代RESTful API的开发范式。 本期就扒一扒其技术演进的关键节点与核心逻辑&#xff1a; &#x1f504; 一、起源与初创期&#xff1a;Swagger的诞生&#xff08;2010-2014&#xff09; 核心…...

Element Plus 表单(el-form)中关于正整数输入的校验规则

目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入&#xff08;联动&#xff09;2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...