文档章节

C++零基础(一):基本元素介绍

 无无天助
发布于 2014/09/23 13:02
字数 2767
阅读 40
收藏 0

#C++零基础(一):基本元素介绍

##写在前面

以前没有接触过C语言,所以会着重搞懂名词的意思;但我也学过一点点Java,所以后面遇到相通的地方我可能会跳过。如果各位看官不适应,请见谅。

废话少说,这是我的第一个C++程序,输出一行字符:“Hello World!”,代码如下:

//myfirst.cpp
#include <iostream>		//包含头文件iostream
using namespace std;	//使用命名空间std
int main()
{
	cout << "Hello World!" << endl;
	return 0:
}

运行时会在屏幕输出以下信息:

Hello World!

##理解

首先,上面的代码包含以下元素:

  • 注释
  • 预处理命令#include
  • 编译指令:using namespace std;
  • 函数头:int main()
  • 函数体,由{和}括起
  • 使用C++的cout工具显示消息的语句
  • 结束main()函数的返回语句

###注释

注释分为两种,单行注释和多行注释

  1. 单行注释:以“//”打头,表示告诉编译器,从注释符到行尾的内容全都忽略。可以和代码放在同一行,也可以另起一行
  2. 多行注释:以“/*”打头,“*/”结尾,表示高数编译器,这一对注释符之间的内容(包括注释符)全都忽略。

###预处理命令

程序第1行“#include <iostream>”,这不是一个C++的语句,而是C++的一个预处理命令,它以“#”开头区别C++语句,行末没有分号。#include <iostream>是一个“包含命令”,它的作用是将文件iostream的内容包含到该命令所在的程序文件中,代替该命令行。文件iostream的作用是向程序提供输入或输出所提供的一些信息。

###命名空间

“using namespace std;”的意思是“使用命名空间std”,C++标准库中的类和函数是在命名空间std中声明的,因此程序中如果需要用到C++标准库(此时就需要用#include命令行),就需要用“using namespace std;”作声明,表示要用到命名空间std中的内容。

###函数

函数由两部分组成,函数头和函数体

####函数头

用“main”表示“主函数”的名字。每一个C++程序必须要有一个main函数。main函数前面的int的作用是声明函数的类型为整型。对函数与程序其他部分之间的接口进行总结。

####函数体

函数体是指出函数应该做什么的计算机指令。函数体包含语句。在C++中,每条完整的指令都称为语句。所有的语句都以分号结束,表示告诉编译器,这条语句结束了。

###标准输出流

cout——C++编程语言互换流中的标准输出流,需要iostream.h支持。读为 "c out"

endl——与cout搭配使用,意为输出结束,相当于输出时回车

###返回语句

“return 0”的作用是向操作系统返回一个零值。如果程序不能正常运行,则会自动向操作系统返回一个非零值,一般为-1

##拓展

前面搞得我云里雾里的术语及概念抄完了,现在开始我自己的思考以及一些摘抄

###深度拓展

####知识从何而来?

贝尔实验室比雅尼·斯特劳斯特鲁普博士在20世纪80年代发明并实现了C++。

####博士是如何写出C++的?

比雅尼·斯特劳斯特鲁普(Stroustrup)工作起于1979年的C with Classes。这个构思起源于Stroustrup做博士论文时的一些程序撰写经验。他发现Simula具备很利于大型软件开发的特点,但Simula的运行速度太慢,无法对现实需求发挥功效;BCPL虽快得多,但它过于低级的特性,使其不适于大型软件的开发。当Stroustrup开始在贝尔实验室工作时,他有分析UNIX核心关于分散式计算的问题。回想起他的博士论文经验,Stroustrup开始为C语言增强一些类似Simula的特点。之所以选择C,是因为它适于各种用途、快速和可移植性。除了CSimula之外,同时也从其它语言中取得灵感,如ALGOL 68Ada、CLU以及ML。刚开始时,类型、派生类、存储类型检查、内联和默认参数特性,都是通过Cfront引入C语言之中。1985年10月出现了第一个商业化发布。 1983年,C with Classes改命名为C++。

####注释符

以“//”作为起始作为注解起源于C的前身BCPL,而后在1983年被重新引入C++。

###横向拓展

####Java vs C++

我学过一点点Java,这是达成同样效果的代码的Java版本:

//myfirst.java
public class myfirst
{
	public static void main(String args[]) {
		System.out.println("Hello World!");
	}
}

输出结果:

Hello World!

首先一一来分析:

#####1.Java没有头文件的概念

  1. 头文件可以定义所用的函数列表,方便查阅你可以调用的函数;
  2. 头文件可以定义很多宏定义,就是一些全局静态变量的定义,在这样的情况下,只要修改头文件的内容,程序就可以做相应的修改,不用亲自跑到繁琐的代码内去搜索。
  3. 头文件只是声明,不占内存空间,要知道其执行过程,要看你头文件所申明的函数是在哪个.c文件里定义的,才知道。
  4. 调用了头文件,就等于赋予了调用某些函数的权限,如果你要算一个数的N次方,就要调用Pow()函数,而这个函数是定义在math.c里面的,要用这个函数,就必需调用math.h这个头文件。
  1. Java是通过使用文档注释生成相应文档,实现第1点的功能
  2. Java没有全局变量的说法,有的只是对象。但有类似的,就是static修饰符。但是相对的,如果想要进行修改,只能返回原先位置进行修改。Java的解决办法是专门写一个final类,在里面定义全局变量
    BTW:全局变量会严重影响Java的封装和模块化
  3. Java中类似#include的声明——import,也同样只是声明,不占内存空间。但区别在于,#include告诉编译器,将头文件的内容加载到源文件,替换掉当前行代码;而import只是告诉编译器,程序使用工具可能在什么类里,让编译器自己去找,不用加载到源程序中
  4. Java中的import同样实现此功能

#####2.Java对源程序打包的机制不同

  1. Java里只有类,所以只需要把类定义在各自的包里就可以避免重复了;c++的命名空间里,不但可以包括类,还可以包括函数,变量,模板等.
  1. Java里在类的第一行用packge 包名 就可以把类放到包里了;c++里用namespace 命名空间名{类,函数,变量,模板等};

Java里面都是class,放包里,并且名字不能重复;
C++可以同名,但是后缀不能一样

#####3.Java主函数可以接受数据,没有返回值

Java主函数的定义为:

public static void main(String args[]) {
	statements(语句)
}

与C++不同的是,上面的“void”修饰符表示没有返回值;而括号内的“String args[]”表示可以接收数据类型为字符串的数组

#####4.Java输出调用的工具不同

Java类似的输出有三种方式:

1. System.out.print();		//输出并将光标定位在所显示的最后一个字符之后。
2. System.out.println();	//输出信息并在结尾加上换行符,将输出光标定位在下一行的开始。
3. System.out.printf();		//格式化输出的形式,具体细节请自己百度

####同一时期还有哪些大事发生?

3月23日——星球大战计划:总统里根制订了他的第一个用于发展拦截敌军导弹技术的提案。媒体称这个为“星球大战”;

6月13日——先驱者10号成为第一个飞出太阳系的人造物体;

8月24日——台湾台中县(今台中市)丰原高中,发生礼堂倒塌事件,当时礼堂正举行新生训练,造成27人当场死亡,83人轻重伤。当时台湾省政府教育厅长、现任台湾团结联盟主席黄昆辉,事件发生后立即引咎辞职。

9月23日——香港港元危机爆发,港币浮动价跌至9.6港元兑换一元美金,一日后更至10港元兑换一元美金,最后导致联系汇率产生。

12月22日——中国第一台每秒钟运算一亿次以上的银河计算机在长沙研制成功

###纵向拓展

就是传说中的“瞎扯淡”

####C++基本元素与《半泽直树》的关系

尽管是扯淡,但看到C++跟《半泽直树》,我瞬间就蒙了。这还有关系!?

别说,还真有。

就拿半泽直树追回5亿贷款这件事来说吧。
半泽直树追回贷款的流程为:

(目标)追回贷款→拿到账本→尝试收回别墅(被半路抢走)→同行刁难(化解)→找到欠债者→查出私密账号→请求债主情妇帮忙→追回贷款(目标达成)

有两点是只要我们稍加思考就可以得出的结论:

  1. 如果半泽直树没有来回奔波、拼尽全力,抓住每一个机会,就没有可能将5亿贷款收回;
  2. 如果半泽直树没有办法解决来自同行的针对和突发事件造成的恶劣影响,也同样没有可能完成最终目标

这也同样适用于C++。

C++是一门编程语言。用来干什么的?
用来写对计算机发出的指令。

目的是什么?
想要通过代码命令计算机为自己做事,获得想要的结果

也就是说

  1. 如果在代码中哪怕有一丝错漏,就没有办法得到自己想要的结果;
  2. 如果不事先将计算机运行指令过程中可能出现的问题的解决办法写入代码中,也同样没有办法获得自己想要的结果。

关于第一点,这就是我为什么花这么大的篇幅去抠一个简单的C++程序每一个词的原因,代码运行无法接受一丝错漏。

至于第二点,涉及到后面的异常处理机制,等到后面再说吧。(再说我现在也不懂(¬_¬))

##应用

课后练习题:请照抄一遍上面的第一个C++程序(或者自己在其他地方找),试运行。然后搞懂程序中出现的每一个符号的含义。

© 著作权归作者所有

粉丝 0
博文 4
码字总数 8134
作品 0
广州
私信 提问
vc++windows编程技术(3)

从一开始就有两种编写windows应用程序的方法。第一种是使用win32定义的API函数,体现细节好。另一种是使用特殊的c++类库,它囊括了API,目前最流行的是MFC。两种方法的区别:所有windows应用...

mli
2014/10/23
142
2
成都大数据开发学习路线是什么?大数据开发学习难不难?

现在想学习大数据开发课程的朋友越来越多,当然其中有很多都是零基础,对编程语言也不是很了解。那么零基础能不能学习大数据开发呢?答案是肯定的。当然想要通过自学基本上是不可能的,不过可...

加米谷大数据
2018/07/30
4
0
STL list链表的用法详解

------------------------------------------------------------------------------- 原来... STL list链表的用法详解 本文以List容器为例子,介绍了STL的基本内容,从容器到迭代器,再到普通...

nao
2014/04/10
289
0
C++程序设计与数据结构算法视频教程

课程目标:使学员深入了解C++语言,能够熟练使用C++编写程序。通过学习数据结构,能用C++编写出更加灵活,巧妙,健壮的代码。学完全部课程后,学员具备一定的编程思想和编程逻辑,从而对其他...

星辰8209
2018/07/26
0
0
C++ STL学习——vector

学过C++的人肯定会很熟悉STL标准模板库,STL其实就是封装了一系列的接口,供我们调用。很多函数或者算法的实现不需要我们从头开始写,大大提高我们的编程效率。这篇博客在简单介绍STL的情况下...

chenyufeng1991
2016/08/21
0
0

没有更多内容

加载失败,请刷新页面

加载更多

查看线上日志常用命令

cat 命令(文本输出命令) 通常查找出错误日志 cat error.log | grep 'nick' , 这时候我们要输出当前这个日志的前后几行: 显示file文件里匹配nick那行以及上下5行 cat error.log | grep -C ...

xiaolyuh
23分钟前
3
0
六、Java设计模式之工厂方法

工厂方法定义: 定义一个创建对象的接口,但让实现这个接口的类来决定实例化哪个类,工厂方法让类的实例化推迟到子类中进行 类型:创建型 工厂方法-使用场景: 创建对象需要大量重复的代码 ...

东风破2019
30分钟前
3
0
win服务器管理遇到的一系列问题记录

有些小伙伴在使用iis7远程桌面管理工具的时候总是会遇到一系列的问题,下面就是为大家介绍一下服务器日常管理过程中出现的问题及我的解决办法和心得。希望能帮到大家。   拒绝服务器重新启...

1717197346
37分钟前
4
0
flutter 剪切板 复制粘贴

复制粘贴功能 import 'package:flutter/services.dart'; Clipboard.setData(ClipboardData(text:_text));Clipboard.getData;...

zdglf
40分钟前
3
0
如何保证消息的可靠性传输?或者说,如何处理消息丢失的问题?

面试题 如何保证消息的可靠性传输?或者说,如何处理消息丢失的问题? 面试官心理分析 这个是肯定的,用 MQ 有个基本原则,就是数据不能多一条,也不能少一条,不能多,就是前面说的重复消费...

米兜
40分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部