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.mfbz.cn/a/156012.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2023年中国冲击波治疗仪市场发展趋势分析:未来市场增长空间更大[图]

冲击波在临床医学领域最早应用于体外冲击波碎石&#xff0c;在二十世纪八十年代末期&#xff0c;体外冲击波碎石技术开始被运用到骨科及康复理疗领域&#xff0c;经过十余年的临床研究&#xff0c;冲击波疗法日益完善&#xff0c;应用范围也日益扩大。冲击波作为一种介于保守疗…

【MATLAB】史上最全的9种数据拟合算法全家桶

有意向获取代码&#xff0c;请转文末观看代码获取方式~ 大家吃一顿火锅的价格便可以拥有9种数据拟合算法&#xff0c;绝对不亏&#xff0c;知识付费是现今时代的趋势&#xff0c;而且都是我精心制作的教程&#xff0c;有问题可随时反馈~也可单独获取某一算法的代码&#xff08…

什么是等保测评?

随着近几年随着网络技术的发展&#xff0c;互联网应用的普及和丰富&#xff0c;互联网安全问题也日益严重&#xff0c;利用信息技术进行的高科技犯罪事件呈现增长态势。从2004年度CNCERT的信息网络安全工作报告中我们看到&#xff0c;信息网络安全事故在逐年上升&#xff0c;20…

leetcode:移除链表元素

1.题目描述 题目链接&#xff1a;203. 移除链表元素 - 力扣&#xff08;LeetCode&#xff09; 2.解题思路 我们定义一个cur指向当前结点&#xff0c;定义prev指向前一个结点&#xff0c;next指向下一个结点 如果cur->valval&#xff0c;那我们就删除这个结点 怎么删除呢…

PHP写一个电商 Api接口需要注意哪些?考虑哪些?

随着互联网的飞速发展&#xff0c;前后端分离的开发模式越来越流行。编写一个稳定、可靠和易于使用的 API 接口是现代互联网应用程序的关键。本文将介绍在使用 thinkphp6 框架开发 电商API 接口时需要注意的要点和考虑的问题&#xff0c;并提供详细的逻辑步骤和代码案例。 1. …

Spring Cloud Hystrix:服务容错保护

&#x1f497;wei_shuo的个人主页 &#x1f4ab;wei_shuo的学习社区 &#x1f310;Hello World &#xff01; Spring Cloud Hystrix&#xff1a;服务容错保护 Spring Cloud Hystrix是Spring Cloud中的一个子项目&#xff0c;主要用于服务容错保护&#xff1b;分布式系统中&…

系列一、JVM概述

一、概述 1.1、Java发展中的重大事件 1.2、虚拟机 vs Java虚拟机 1.2.1、虚拟机 1.2.2、Java虚拟机 1.2.3、Java虚拟机的作用 Java虚拟机是二进制字节码的运行环境&#xff0c;负责装载字节码到其内部&#xff0c;解释/编译为对应平台上的机器指令指令。每一条Java指令&#…

矩阵乘法的性质

矩阵乘法满足结合律和分配律&#xff0c;不满足交换律。 - 结合律 (AB)CA(BC) 其中为常数 - 分配律 A(BC)ABAC (AB)CACBC

MPN – 制造零件号

S/4 1610 中的 MPN – 基于 NAST 的输出管理 我试图查找有关 MPN 设置的信息&#xff0c;但找不到详细的配置步骤。在浏览了一些信息和 help.sap 链接后&#xff0c;我能够在 S/4 1610 系统中配置 MPN 设置&#xff0c;这与使用旧输出类型&#xff08;Nast 和输出类型 NEU&…

力扣第695题 岛屿的最大面积 C++ DFS BFS 附Java代码

题目 695. 岛屿的最大面积 中等 相关标签 深度优先搜索 广度优先搜索 并查集 数组 矩阵 给你一个大小为 m x n 的二进制矩阵 grid 。 岛屿 是由一些相邻的 1 (代表土地) 构成的组合&#xff0c;这里的「相邻」要求两个 1 必须在 水平或者竖直的四个方向上 相邻。你…

9.jvm调优相关工具-java自带

目录 概述jdk工具包jpsjps -qjps -mjps -vjps -l jstatjstat -gcjstat -gcutiljinfo jmapjmap heapjmap histo[:live]jmap clstatsjmap dump jhatjstack 结束 概述 做了一些 1.8 与1.17.x jdk对比&#xff0c;最重要的是实际操作一次。 这些是java自带的命令&#xff0c;属于离…

wpf devexpress在未束缚模式中生成Tree

TreeListControl 可以在未束缚模式中没有数据源时操作&#xff0c;这个教程示范如何在没有数据源时创建tree 在XAML生成tree 创建ProjectObject类实现数据对象显示在TreeListControl: public class ProjectObject {public string Name { get; set; }public string Executor {…

【C++学习手札】模拟实现string

&#x1f3ac;慕斯主页&#xff1a;修仙—别有洞天 ♈️今日夜电波&#xff1a;缶ビール—みゆな 0:41━━━━━━️&#x1f49f;──────── 2:52 &#x1f504; ◀️ ⏸ ▶️ ☰ &…

2023年中国逆流式冷却塔性能特点、应用领域及市场规模分析[图]

按冷却塔热交换时气流和水流方向不同的配置&#xff0c;机力通风冷却塔又可分为横流式冷却塔、逆流式冷却塔&#xff0c;目前主流的冷却塔型式为逆流式冷却塔&#xff0c;逆流式冷却塔&#xff08;counterflowcoolingtower&#xff09;是指水流在塔内垂直落下&#xff0c;气流方…

员工电脑管理软件,企业电脑管理软件是什么

员工电脑管理软件&#xff0c;企业电脑管理软件是什么 企业电脑管理软件是指用于管理和监控企业员工工作电脑的软件。这些软件通常提供多种功能&#xff0c;旨在帮助企业管理员工电脑的使用、监控和维护&#xff0c;同时确保信息安全、提高生产力并确保合规性。推荐一款功能强…

java计算两个字符串日期相隔天数

java计算两个字符串日期相隔天数 public static void main(String[] args) throws ParseException {Scanner sc new Scanner(System.in);System.out.print("请输入计算开始的日期(yyyy-MM-dd):");String startTime sc.next();System.out.print("请输入计算结…

算法-链表-简单-相交、反转、回文、环形、合并

记录一下算法题的学习5 在写关于链表的题目之前&#xff0c;我们应该熟悉回忆一下链表的具体内容 什么是链表&#xff1a; 链表&#xff08;Linked list&#xff09;是一种常见的基础数据结构&#xff0c;是一种线性表&#xff0c;但是并不会按线性的顺序存储数据&#xff0c…

Windows电脑画面如何投屏到电视?怎样限定投屏内容?

电视通常比计算机屏幕更大&#xff0c;因此将电脑画面投射到电视上可以提供更广阔的视野和更好的视觉体验。通过将电脑画面投射到电视上&#xff0c;您可以与他人共享您的计算机屏幕上的内容。这对于展示演示文稿、观看影片或与他人分享照片等活动非常有用。 如果你的电脑系统是…

Azure的AI使用-(语言检测、图像分析、图像文本识别)

1.语言检测 安装包&#xff1a; # 语言检测 %pip install azure-ai-textanalytics5.2.0 需要用到密钥和资源的终结点&#xff0c;所以去Azure上创建资源&#xff0c;我这个是创建好的了然后点击密钥和终结者去拿到key和终结点 两个密钥选择哪个都行 语言检测代码示例&#…

Vue数据绑定

在我们Vue当中有两种数据绑定的方法 1.单向绑定 2.双向绑定 让我为大家介绍一下吧&#xff01; 1、单向绑定(v-bind) 数据只能从data流向页面 举个例子&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"…