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. 总结(手稿版) C 是一种高级编程语言,是C语言的扩展和改进版本,由Bjarne Stroustrup于1983年在贝尔实验室为了支持C语言中的面向对象编程而创建。C 既能够进行底层的系统编程…...
信通初试第一:无科研无竞赛一战上岸上海交大819学硕感悟
笔者来自通信考研小马哥23上交819全程班学员 信通初试第一:无科研无竞赛一战上岸上海交大819学硕感悟 原创2023-04-27 11:04通信考研小马哥 笔者来自通信考研小马哥23上交819全程班学员 本人情况: 本人是19届交本,本科成绩很差,…...
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数据治理认证考试开放报名地区有:北京、上海、广州、深圳、长沙、呼和浩特。 目前南京、济南、西安、杭州等地区还在接近开考人数中,打算参加6月考试的朋友们可以抓紧时间报名啦!!! 5月初,…...
STM32+esp8266,让你的STM32开发板连接网络-----esp8266
分享一下,STM32开发板连接网络的第一种方法:连接esp8266。 esp8266与STM32利用串口通信连接,esp8266连接网络,把收到的数据通过串口的方式传输给STM32,之后STM32接收到消息做出对应的反应。 使用到的开发板如图&…...
分布式缓存的基础知识
前言 现代互联网应用中,分布式缓存成为了必不可少的一环。它通过在多台服务器之间共享数据,避免了网络通信的高延迟和低带宽的性能问题。本文将介绍分布式缓存的基础知识,包括缓存机制、常见的缓存策略以及缓存的使用场景。 缓存机制 缓存是…...
Vue3通透教程【七】生命周期函数
文章目录 🌟 写在前面🌟 生命周期钩子函数🌟 组合式API生命周期🌟 写在最后🌟 写在前面 专栏介绍: 凉哥作为 Vue 的忠实 粉丝输出过大量的 Vue 文章,应粉丝要求开始更新 Vue3 的相关技术文章,Vue 框架目前的地位大家应该都晓得,所谓三大框架使用人数最多,公司选…...
《“裸奔”时代的网络防护:如何保护你的隐私和数据安全》
一、引言 在此时此刻,你可能正在使用电子设备阅读这篇文章。你可能在一天中的大部分时间都在与网络世界互动,无论是通过电子邮件、社交媒体、在线购物,还是通过流媒体服务消费内容。然而,你有没有考虑过,当你在享受这些…...
mapreduce优化方法
1)数据输入: 1)合并小文件:在执行mr任务前将小文件进行合并,大量的小文件会产生大量的map任务,增大map任务装载次数,而 任务的装载比较耗时,从而导致 mr 运行较慢。 2)…...
06-nexus搭建Docker私仓
使用nexus创建docker私有仓库 Nexus的安装请参考该文档:https://www.yuque.com/tmfl/pom/uumrx2 Nexus配置Docker仓库步骤; nexus默认docker是失效的,需要 在security --> Realms,将docker配置成Active在 Repository 的 Blo…...
【RS专题】eval层混淆和逻辑完整分析 - 扣代码终结篇
如有侵权、联系本人下架 首先明确一下目标,我们要先获取网页200的源代码,RS5代第一次响应为412,第二次为200。如果是200就表示正常 以下为某 yjj RS5请求成功的结果,具体流程请看完文章,源-码–答-案也会在末 尾公 布 前面是定义了非常多和函数,一直往下拉,直到出现v…...
基于matlab使用主动声纳系统进行水下目标检测
一、前言 此示例演示如何模拟具有两个目标的主动单基地声纳方案。声纳系统由各向同性投影仪阵列和单个水听器元件组成。投影仪阵列呈球形。反向散射信号由水听器接收。接收到的信号包括直接和多路径贡献。 二、水下环境 在浅水环境中,声源和目标之间存在多个传播路径…...
[socket]hpsocket-pull模式
为什么要用pull模式呢,我不是所谓的别人说pull效率高,是因为包头的长度 int不是固定长度。服务器IO-HPSocket PUSH:收到数据立马触发OnReceive,由开发人员自己实现拆包和缓冲区的管理逻辑。 PULL:收到数据立马触发OnR…...
数据分析师 ---- SQL强化(3)
数据分析师 ---- SQL强化(3) 题目:每个月Top3的周杰伦歌曲 从听歌流水中找到18-25岁用户在2022年每个月播放次数top 3的周杰伦的歌曲 输入例子: drop table if exists play_log; create table play_log (fdate date,user_id int,song_id int ); inser…...
微信小程序商品分类页最佳实践
首先我们来分析下UI小妹发来的产品原型图: 微信小程序商品分类页需要实现 1.单击左边的商品类目,右侧实现联动跳转到对应商品类目标题; 2.触屏拖动右侧商品列表,右侧跳转到对应商品类目; 2.分析需求我们可以把屏幕分…...
正则化解决过拟合
本片举三个例子进行对比,分别是:不使用正则化、使用L2正则化、使用dropout正则化。 首先是前后向传播、加载数据、画图所需要的相关函数的reg_utils.py: # -*- coding: utf-8 -*-import numpy as np import matplotlib.pyplot as plt impor…...
在 Windows 上安装 Helm包
一、前言 个人主页: ζ小菜鸡大家好我是ζ小菜鸡,让我们一起学习在 Windows 上安装 Helm包。如果文章对你有帮助、欢迎关注、点赞、收藏(一键三连) 二、 Helm是什么 Helm是Kubernetes的包管理工具,类似于centos的yum,能够快速查找、下载和安装…...
Clion开发STM32之OTA升级模块(一)
什么是OTA 百度百科解释个人理解:就是不通过烧录的方式,通过串口、网口、无线对主板运行的程序进行升级。减少后期的一个维护迭代程序的一个成本。 STM32的OTA升级模块的一个设计 程序启动的一个框架流程图(大致流程) FLASH的一个划分框图 BootLoader…...
Java供应链安全检测SDL方法论
近些年,开源程序陆续爆出安全漏洞,轻则影响用户体验,重则业务应用沦陷。大量的业务应用以及每天数千次的迭代,使得自动检测和治理第三方开源程序成为企业安全建设的必要一环。如何来建设这一环呢?SCA(软件成分分析) 概念 什么是SCA? 源代码或二进制扫描的软件成分分析 什…...
装饰模式(Decorator Pattern)重构java邮件发奖系统实战
前言 现在我们有个如下的需求,设计一个邮件发奖的小系统, 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其…...
阿里云ACP云计算备考笔记 (5)——弹性伸缩
目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...
大型活动交通拥堵治理的视觉算法应用
大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动(如演唱会、马拉松赛事、高考中考等)期间,城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例,暖城商圈曾因观众集中离场导致周边…...
Java多线程实现之Callable接口深度解析
Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...
UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)
UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中,UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化…...
自然语言处理——循环神经网络
自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元(GRU)长短期记忆神经网络(LSTM)…...
DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”
目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...
STM32HAL库USART源代码解析及应用
STM32HAL库USART源代码解析 前言STM32CubeIDE配置串口USART和UART的选择使用模式参数设置GPIO配置DMA配置中断配置硬件流控制使能生成代码解析和使用方法串口初始化__UART_HandleTypeDef结构体浅析HAL库代码实际使用方法使用轮询方式发送使用轮询方式接收使用中断方式发送使用中…...
Golang——6、指针和结构体
指针和结构体 1、指针1.1、指针地址和指针类型1.2、指针取值1.3、new和make 2、结构体2.1、type关键字的使用2.2、结构体的定义和初始化2.3、结构体方法和接收者2.4、给任意类型添加方法2.5、结构体的匿名字段2.6、嵌套结构体2.7、嵌套匿名结构体2.8、结构体的继承 3、结构体与…...
WebRTC从入门到实践 - 零基础教程
WebRTC从入门到实践 - 零基础教程 目录 WebRTC简介 基础概念 工作原理 开发环境搭建 基础实践 三个实战案例 常见问题解答 1. WebRTC简介 1.1 什么是WebRTC? WebRTC(Web Real-Time Communication)是一个支持网页浏览器进行实时语音…...
