说明

看《C++ Primer Plus》时整理的学习笔记,部分内容完全摘抄自《C++ Primer Plus》(第6版)中文版,Stephen Prata 著,张海龙 袁国忠译。只做学习记录用途。

2.1 进入C++

2.1.1 main() 函数

如下几行代码构成了函数定义,该定义由两部分组成:第一行 int main()函数头,花括号中包括的部分叫函数体。函数头对函数与程序其他部分之间的接口进行了总结;函数体是指出函数应做什么的计算机指令。每条完整的指令都称为语句,所有语句都以分号结束。main() 被启动代码调用,启动代码是程序和操作系统之间的桥梁,在运行独立的 C++ 程序时,通常从 main() 函数开始执行。如果编译器到达 main() 函数末尾时没有遇到返回语句,则默认 return 0,这条隐含的返回语句只适用于 main() 函数,不适用于其他函数。操作系统根据 main() 函数的返回值来判断程序是否存在问题,通常的约定是:退出值为零则意味着程序运行成功,为非零则意味着存在问题。

int main()
{
statements;
return 0;
}

2.1.2 C++ 注释

注释是程序员为读者提供的说明,通常用于解释代码的用途,编译器编译时会忽略注释。行注释以双斜杠 // 打头,到行尾结束;块注释(也称C-风格注释)以 /* 开始,到 ** */ **结束,块注释可以跨越多行。

//我是行注释,我只能待在双斜杠兄弟的后面

/* 	我是块注释,我可以在这一行
也可以在这一行
还可以在这一行,但我不能跑到它们的外面 */

2.1.3 C++ 预处理器

预处理器在程序进行主编译之前对源文件进行处理。有些 C++ 实现使用翻译器程序将 C++ 程序转换为 C 程序,这里的翻译器也是一种预处理器,但通常所说的预处理器一般用来处理名称以 # 开头的编译指令。不必执行任何特殊的操作来调用预处理器,它会在编译程序时自动运行。下面是一种典型的预处理器操作: #include 编译指令导致 iostream 文件的内容随源代码文件的内容一起被发送给编译器。这个过程中,原始文件并没有被修改,而是将源代码文件和 iostream 组合成一个复合文件,编译的下一阶段将使用该文件。

#include <iostream> 	//一条预处理器指令

2.1.4 头文件名

iostream 这样的文件叫做包含文件(include file,由于它们被包含在其他文件中),也叫头文件(header file,由于它们被包含在文件起始处)。C 语言的传统是:头文件使用扩展名 h。C++用法对老式 C 的头文件保留了扩展名 h,对部分 C 头文件去掉扩展名 h 并在文件名前加上前缀 c,纯粹的 C++ 头文件则没有扩展名。

2.1.5 名称空间

名称空间支持是一项 C++ 特性。当使用两个已封装好的库,但它们都包含一个同名函数时(例如 wanda() 函数),编译器将不知道应该使用哪个版本。为此,可以将两个库函数的定义放在不同的名称空间中,例如厂商 Microflop Industries 将他们定义的 wanda() 函数放入一个名为 Microflop 的名称空间中,这样,其 wanda() 函数的全称为 Microflop::wanda() ;同样,厂商 Piscine 的 wanda() 函数的全称为 Piscine::wanda() 。这样,程序就可以使用名称空间来区分不同的版本了。

当使用某名称空间中的类、函数或变量时,有三种方式:

  1. 使用 using 编译指令 一次性导入名称空间中定义的所有名称,这是一种偷懒的做法,在大型项目中会存在潜在的问题;
  2. 使用 using 声明 逐条导入所需的名称;
  3. 使用 名称空间名::名称 的形式直接使用目标名称空间中的类、函数或变量,例如 std::cout << "hello world"
using namespace std; 	//using编译指令导入std名称空间中的所有名称

using std::cout; 		//using声明导入std名称空间中的cout
using std::endl; //using声明导入std名称空间中的endl
using std::cin; //using声明导入std名称空间中的cin

使用上述前两种方式之一导入所需名称后,便可以直接使用相应的名称而不必加上名称空间前缀。

2.1.6 使用 cout 进行 c++ 输出

这里涉及到运算符重载,详见后面章节。 endl\n 都表示换行符,一个差别是 endl 确保程序继续运行前刷新输出(将其立即显示在屏幕上),而 \n 不能提供这样的保证,这意味着在有些系统中,有时可能在输入信息后才会出现提示。

2.1.7 C++源代码的格式化

在 C++ 中,回车的作用和空格或制表符相同,可以在能够使用回车的地方使用空格,反之亦然。这说明既可以把一条语句放在几行上,也可以把几条语句放在同一行上,虽然不太好看,但仍是合法的代码。一行代码中不可分割的元素叫做标记,空格、制表符和回车统称为空白,通常,必须用空白将两个标记分开。一般来说,有效但难看的代码不会令人满意,如果遵循合理的风格,程序将更便于阅读:

  • 每条语句占一行。
  • 每个函数的开始花括号以及结束花括号独自各占一行。
  • 语句在应该缩进的地方缩进。

2.2 C++ 语句

2.2.1 声明语句

声明语句创建变量,指出了要存储的数据类型和程序对存储在这里的数据使用的名称,声明语句通常导致编译器为变量分配内存空间。

int carrots;

2.2.2 赋值语句

赋值语句给变量提供一个值(将值赋给存储单元),符号 = 叫做赋值运算符,C++ 和 C 可以连续使用赋值运算符,此时赋值将从右向左进行。

carrots = 25;	//常见赋值
a = b = c = 25; //连续赋值

2.3 其他 C++ 语句

cincout 的使用,类的简介:描述了一种数据类型的全部属性(包括可使用它执行的操作),对象是根据这些描述创建的实体。

2.4 函数

C++ 函数分两种:有返回值的和没有返回值的。

2.4.1 有返回值的函数

有返回值的函数将生成一个值,这个值可赋给变量或在其他表达式中使用。被调用的函数叫做被调用函数(called function),包含函数调用的函数叫做调用函数(calling function)。函数原型描述的是发送给函数的信息和返回的信息,函数定义则包含了函数的代码,C++程序应当在首次使用函数之前提供其原型,有两种方式:一是在源代码中输入函数原型、二是包含相应的头文件。

double sqrt(double);	//函数原型
#include <cmath> //包含头文件

2.4.2 函数变体

有些函数需要多个参数,有些函数不接受任何参数,有些函数没有返回值。

double pow(double, double); 	//需要多个参数
int rand(void); //不接受任何参数
int rand(); //不接受任何参数,void可省略
void bucks(double); //没有返回值

在有些语言中,有返回值的函数被称为函数;没有返回值的函数被称为过程子程序;C++ 与 C 一样,这两种变体都被称为函数。

2.4.3 用户定义的函数

使用自定义函数时,通常将函数原型放到 main() 定义之前,将函数定义放到 main() 的后面。函数定义包括函数头和花括号中的函数体

type functionname(argumentlist) 	//函数头
{
statements //函数体
}

2.4.4 用户定义的有返回值的函数

函数原型描述了函数接口,即函数如何与程序的其他部分交互;参数列表指出了何种信息将被传递给函数;函数类型指出了返回值的类型。

2.4.5 在多函数程序中使用 using 编译指令

让程序能够访问名称空间中类、函数或变量的方法有多种:

  • using 编译指令 放在所有函数定义之前,使得文件中所有函数都能使用该名称空间中的所有元素。
  • using 编译指令 放在特定函数定义中,让特定函数能使用该名称空间中的所有元素。
  • 在特定函数定义中使用 using 声明 ,让特定函数能使用该名称空间中的指定元素。
  • 在需要使用名称空间中某元素时,直接使用前缀 名称空间名::名称 的形式。

第2章 开始学习C++的更多相关文章

  1. 跟着鸟哥学Linux系列笔记3-第11章BASH学习

    跟着鸟哥学Linux系列笔记0-扫盲之概念 跟着鸟哥学Linux系列笔记0-如何解决问题 跟着鸟哥学Linux系列笔记1 跟着鸟哥学Linux系列笔记2-第10章VIM学习 认识与学习bash 1. ...

  2. 第二章 开始学习C++

    第二章  开始学习C++ 2.1  main函数 简单代码如下: #include <iostream> int main() { //This is my first program u ...

  3. 《C++Primer》第五版习题解答--第四章【学习笔记】

    [C++Primer]第五版习题解答--第四章[学习笔记] ps:答案是个人在学习过程中书写,可能存在错漏之处,仅作参考. 作者:cosefy Date: 2020/1/11 第四章:表达式 练习4. ...

  4. 《C++Primer》第五版习题答案--第五章【学习笔记】

    <C++Primer>第五版习题答案--第五章[学习笔记] ps:答案是个人在学习过程中书写,可能存在错漏之处,仅作参考. 作者:cosefy Date: 2020/1/15 第五章:语句 ...

  5. 《C++Primer》第五版习题答案--第六章【学习笔记】

    <C++Primer>第五版习题答案--第六章[学习笔记] ps:答案是个人在学习过程中书写,可能存在错漏之处,仅作参考. 作者:cosefy Date: 2020/1/16 第六章:函数 ...

  6. 逆向基础 C++ Primer Plus 第二章 开始学习C++

    C++ Primer Plus 第二章 开始学习C++ 知识点梳理 本章从一个简单的C++例子出发,主要介绍了创建C++程序的步骤,以及其所包含的预处理器编译指令.函数头.编译指令.函数体.注释等组成 ...

  7. C++ primer plus读书笔记——第2章 开始学习C++

    第2章 开始学习C++ 1. endl确保程序继续运行前刷新输出(将其立即显示在屏幕上),而使用"\n"不提供这样的保证,这意味着在有些系统中,有时可能在您输入信息后才会出现提示. ...

  8. 第七章——集成学习和随机森林(Ensemble Learning and Random Forests)

    俗话说,三个臭皮匠顶个诸葛亮.类似的,如果集成一系列分类器的预测结果,也将会得到由于单个预测期的预测结果.一组预测期称为一个集合(ensemble),因此这一技术被称为集成学习(Ensemble Le ...

  9. 第一章Java学习(查漏补缺)

    第一章主要内容: 1.Java的地位:网络地位 语言地位 需求地位 2.Java的特点:①简单 面向对象 平台无关:软件的运行不因操作系统,处理器的变化而无法运行或出现运行错误. ②多线程 动态 3. ...

  10. 第01章-欢迎学习VTK

    [译者:这个系列教程是以Kitware公司出版的<VTK User's Guide -11th edition>一书作的中文翻译(出版时间2010年,ISBN: 978-1-930934- ...

随机推荐

  1. 【microPython与esp8266】之一——呼吸灯与PWM

    呼吸灯与pwm pwm是什么? PWM的全称是脉冲宽度调制(Pulse-width modulation),是通过将有效的电信号分散成离散形式从而来降低电信号所传递的平均功率的一种方式: 简而言之,使 ...

  2. 实战 target 选择器,解放生产力!

    大家好,我是半夏,一个刚刚开始写文的沙雕程序员.如果喜欢我的文章,可以关注 点赞 加我微信:frontendpicker,一起学习交流前端,成为更优秀的工程师-关注公众号:搞前端的半夏,了解更多前端知 ...

  3. 手脱NsPacK壳

    1.查壳 使用PEiD未能检测到壳信息,这时,我们更换其他工具 从图中可以看到壳的信息为[NsPacK(3.x)[-]] 2.百度壳信息 北斗程序压缩(Nspack)是一款压缩壳.主要的选项是:压缩资 ...

  4. 用 Python 远程控制 Windows 服务器,太好用了!

    在很多企业会使用闲置的 Windows 机器作为临时服务器,有时候我们想远程调用里面的程序或查看日志文件 Windows 内置的服务「 winrm 」可以满足我们的需求 它是一种基于标准简单对象访问协 ...

  5. 虚拟机:ESX

    VMware ESXi 与ESX 产品之比较   VMware vSphere 5.0 以后版本,所有底层虚拟化产品都改为ESXi产品,本文主要比较了ESXi与ESX的各自特点,以便对大家是否要把现有 ...

  6. unity---世界坐标和本地坐标的转换

    会受到缩放的影响 用的比较多的是 本地坐标转换为世界坐标,比如在自己周围释放物体 当物体发生旋转,方向会发生变化

  7. [漏洞复现] [Vulhub靶机] Struts2-045 Remote Code Execution Vulnerablity(CVE-2017-5638)

    免责声明:本文仅供学习研究,严禁从事非法活动,任何后果由使用者本人负责. 0x00 背景知识 Apache Struts 2是美国Apache软件基金会的一个开源项目,是一套用于创建企业级Java W ...

  8. vue 下搭建ant design环境

    之前用ant-design-vue组件在vue页面下使用 一不小心就会出现编译错误,网上不是搭建教程都是不太准确,现整理下 1.根据ant design vue 官网的假定条件 已经安装了nodejs ...

  9. 1个程序员单干之:怎样给我的升讯威在线客服系统编写堪比 MSDN 的用户手册

    本系列文章详细介绍使用 .net core 和 WPF 开发 升讯威在线客服与营销系统 的过程. 免费在线使用 & 免费私有化部署:https://kf.shengxunwei.com 视频实 ...

  10. 我的第一篇随笔-Test

    用于测试 中文字符 English character