C++第一讲:起源和规范

面向过程和面向对象

大千世界中,事务的发展规律都是面向过程的状态。例如一颗种子从生根到发芽,从发芽到开花,从开花到结果。

但是面向过程是一个更贴近**“机械”**的表达方式,而更贴近人类思想的却是面向对象的表达方式。

以汽车生产为例,用面向过程的方式表达:

  1. 生产车壳
  2. 安装发动机
  3. 安装内饰
  4. 安装轮胎

而面向对象的方式表达:
汽车有车壳、发动机、内饰、轮胎等属性。

面向对象是人类思想的一种“抽象”。
而在程序语言中,近代经典面向过程的语言则是C语言,而它面向对象的语言“亲戚”则是C++

但非常有意思的是,C++在不同的运行平台拥有不同的语法规则
这个现象可以用一个比较形象的比喻是:
中国的官方语言是普通话,但是不同地区存在着四川话、上海话等地区方言。但是不论如何,他们都符合“中文”这个语言规范。

在这里插入图片描述
C++在平台上的运行步骤,简单来说可能是下面这样:
在这里插入图片描述
怎么来理解这个抽象过程呢?可以用平常说话来作比方。
在这里插入图片描述

源代码的书写规范

注释
注释是一种给其他同行的提示“hint”。
通常书写的源代码可能会被其他人阅读借鉴。
如果书写的源代码可能非常冗长(如果是习惯较差的程序员,一个文件可能有上千行),这时候阅读你的杰作是拗口乏味的。所以一定的注释可以大大改善这一情况。

C++中,有两种注释表示方式://和/* */

  • //用来表示剪短的hint(不超过一行)
  • /**/用来表示篇幅长的hint(超过一行)

头文件
头文件相当于所写源文件的目录。
编写目录是一种非常好的习惯,它可以把想表达的大量文字分段落、分章节。

C++中,用h,hpp来表示头文件。
需要注意,我们常见到**include <>和include" "**两种用法。这两种用法功能相同,但又有一些区别:

  • #include :优先标准函数库寻找头文件head
  • #include “head.h”:优先在当前路径下寻找头文件

例如,当head.h是工程中自己定义的头文件,推荐用#include " ";
当head是一个系统自带的头文件,推荐用#include <>。

include的执行原理:将include文件内容复制于调用处,然后与该调用所在源代码,组成复合文件一起送入编译器。

命名空间
命名空间用来解决什么矛盾呢?

你班上有三个同学都叫张三,这时候一个新来你班上的同学无法根据名字来区分这三个人。那么可以用“浙江张三”、“东北张三”、“四川张三”来区分这三个人。
此时,浙江、东北、四川就相当于命名空间。

命名空间的出现,大大避免了程序代码重复定义的现象发生。

C++中,用namespace来定义命名空间。在其它编程语言中也有类似的概念,例如java中,用package定义命名空间。

命名空间不仅可以区分不同类,也可以用于区分C风格函数
例如,有两个不同名的produce函数,都用于生产汽车。
但是加上了VM和GW两个不同的命名空间,就不会造成函数的二义性(ambiguous)

#include <iosteam>namespace VW{void produce(){std:cout << "produce VW car" << std::endl;}void secret(){std:cout << "this is a secret" << std::endl;}
}namespace GW{void produce(){std:cout << "produce GWcar" << std::endl;}
}

下面展示了如何调用不同命名空间下的函数,使用::作用域运算符

#include "example.hpp"int main()
{VW::produce();GW::produce();
}

源代码的书写工具

“工欲善其事必先利其器”,要想书写你脑海里的文字必须要有个好笔杆才行。IDE就是书写C++源代码必不可少的工具。

需要注意的是,市面上的IDE一般分为2种:一种是仅书写,给你提供语法的高亮显示但不提供编译功能;另一种是集成了编译器的重型“IDE”,这类IDE包含了很多常见的编译功能按钮:

这里罗列一下常见功能按钮的解析:

  • compile:编译。对当前源代码文件进行编译。
  • Build/Make:对项目中所有源代码文件进行编译。需要注意的是,这是一个递增过程,意味着它只会重新编译发生改动的文件。
  • Clean:删除之前编译结果。由于Build/Make是个递增的过程,发生改动的文件经过一次编译后,结果会被缓存成一个临时后缀名为“.o”的文件。clean代表清除之前所有这样的临时文件。
  • Link:编译后的源代码与其它.o文件或第三方库进行组合。由于你写的代码很可能像论文一样引用别人论文(也就相当于第三方库)中的表达,所以这时候需要把别人论文中的表达和你的代码进行组合,才能输出通顺的意思。
  • Run/Execute:运行程序。编译好的结果,如果包含main()程序启动入口,就可以开始运行程序。
  • Debug:以步进方式调试程序(gdb)。

Q:不是有编译器帮忙检查语法么,为什么还会出现语病呢?
A:语病的种类很多,像不合逻辑,表意不明,语序不当是符合语法,但不符合常识的语病。

所以我们可以得出一个重要结论:
编译器通过不等于程序合法

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

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

相关文章

怎样备份电脑文件最安全

怎样备份电脑文件最安全 数据对一家公司来说是非常重要的资产&#xff0c;数据备份是非常重要的&#xff0c;主要是为了保护数据免受意外损失、文件损坏、硬件故障、恶意软件攻击、盗窃或灾难性事件等影响。 下载使用安企神电脑屏幕监控软件 备份电脑文件最安全的方法包括&am…

Abaqus R2023x Explicit 新功能介绍

Abauqs Explicit HPC和多物理场 并行计算增强 充分利用共享内存&#xff0c;在每个域上的计算都作为一个独立的任务被分离出来&#xff0c;采用第一个节点的核心作为线程参与来完成这些任务。通过多线程进行并行计算可能会增加内存得消耗。并行计算增强&#xff0c;提高计算效…

【Dolphinscheduler3.1.1】二次开发本地启动项目(前端+后端)

背景说明 由于业务的定制化开发&#xff0c;需要对Dolphinscheduler进行二次开发&#xff0c;现将项目的启动步骤记录如下。 一、 基础软件安装(必装项请自行安装) Maven: v3.5&#xff0c;配阿里云仓库地址即可 Node: v16. MySQL (5.7系列) : 两者任选其一即可 JDK (1.8)…

m1 rvm install 3.0.0 Error running ‘__rvm_make -j8‘

在使用M1 在安装cocopods 前时&#xff0c;安装 rvm install 3.0.0遇到 rvm install 3.0.0 Error running __rvm_make -j8 备注: 该图片是借用其他博客图片&#xff0c;因为我的环境解决完没有保留之前错误信息。 解决方法如下&#xff1a; 1. brew uninstall --ignore-depe…

录屏软件无水印免费的有哪些?我来告诉你!

在日常生活和工作中&#xff0c;我们经常需要使用录屏软件来记录屏幕活动。然而&#xff0c;许多免费录屏软件在录制视频时会添加水印&#xff0c;给用户带来不便。那录屏软件无水印免费的都有哪些呢&#xff1f;在本文中&#xff0c;我们将介绍三款无水印的免费录屏软件&#…

数据结构C语言之线性表

发现更多计算机知识&#xff0c;欢迎访问Cr不是铬的个人网站 1.1线性表的定义 线性表是具有相同特性的数据元素的一个有限序列 对应的逻辑结构图形&#xff1a; 从线性表的定义中可以看出它的特性&#xff1a; &#xff08;1&#xff09;有穷性&#xff1a;一个线性表中的元…

Redis篇---第三篇

系列文章目录 文章目录 系列文章目录前言一、为什么 Redis 需要把所有数据放到内存中?二、Redis 的同步机制了解是什么?三、pipeline 有什么好处,为什么要用 pipeline?前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到…

免费图像压缩工具分享:15 个最佳免费图像压缩工具

您想在将图像上传到网上之前对其进行压缩吗&#xff1f;优化摄影网站的图像将有助于您的网站加载速度更快。而且&#xff0c;更快的加载速度意味着更好的搜索引擎排名&#xff01;在本指南中&#xff0c;我们将分享用于图像压缩的最佳免费图像优化工具。 许多照片编辑程序&…

有趣的按钮分享

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 广告打完&#xff0c;我们进入正题&#xff0c;先看效果&#xff1a; 废话不多&#xff0c;上源码&#xff1a; <button class&quo…

DeepMind发布新模型Mirasol3B:更高效处理音频、视频数据

Google DeepMind日前悄然宣布了其人工智能研究的重大进展&#xff0c;推出了一款名为“Mirasol3B”的新型自回归模型&#xff0c;旨在提升对长视频输入的理解能力。该新模型展示了一种颠覆性的多模态学习方法&#xff0c;以更综合和高效的方式处理音频、视频和文本数据。 Googl…

数据加解密系统(揭秘数据解密的关键技术)

数据加解密系统是一种用于保护数据安全的系统&#xff0c;它可以将数据加密以防止未经授权的访问和数据泄露&#xff0c;同时也可以将已加密的数据解密以供授权用户使用。 随着网络技术和电子商务的不断发展&#xff0c;数据安全问题越来越受到人们的关注。数据加解密系统被广泛…

【数学】距离函数(未完)

文章目录 一、声明二、无符号距离函数 (Unsigned Distance Function, UDF)Wasserstein Distance / Earth Movers Distance ☆欧氏距离 (Euclidean Distance)马氏距离 (Mahalanobis Distance)带权重的最近邻距离&#xff08;Weighted Nearest Neighbor Distance&#xff09;Cham…