第一章 开始

学习一门新的程序设计语言的最好方法就是练习编写程序。


编写一个简单的C++程序

每个C++程序都包含一个或多个函数(function),其中一个必须命名为main。操作系统通过调用main来运行C++程序。

下面是一个简单的main函数,它什么都不做,只是返回给操作系统一个值:

int main()
{return 0;
}

main函数的返回类型必须为int。int类型是一种内置类型(built-in type),即语言自身定义的类型。

函数体是一个以左花括号(curly brace)开始,以右花括号结束的语句块(block of statements)。

return语句结束函数的执行。main的返回值被用来指示状态。返回值0表明成功,非0的返回值的含义由系统定义,通常用来指出错误类型。

重要概念:类型

一种类型不仅定义了数据元素的内容,还定义了这类数据上可以进行的运算。程序所处理的数据都保存在变量中,而每个变量都拥有自己的类型。

编译、运行程序

编写好程序后,我们就需要编译它,这依赖于操作系统和编译器。

程序源文件命名约定

程序文件通常被称为源文件(source file)。它以一个后缀为结尾,告诉系统这个文件是一个C++程序,比如.cpp。

初识输入输出

C++包含了一个全面的标准库(standard library)来提供IO机制(以及很多其他设施)。

iostream库包含两个基础类型istream和ostream,分别表示输入流和输出流。一个流就是一个字符序列,是从IO设备读出或写入IO设备的。

标准输入输出对象

标准库定义了4个IO对象。为了处理输入,使用名为cin的istream类型的对象。这个对象被称为标准输入(standard input)。对于输出,使用名为cout的ostream类型的对象。这个对象被称为标准输出(standard output)。另外还有其他两个ostream对象,名为cerr和clog,cerr通常用来输出警告和错误消息,因此被称为标准错误(standard error)。clog用来输出程序运行时的一般性消息。

系统通常将程序所运行的窗口与这些对象关联起来。因此,当读取cin,数据将从程序正在运行的窗口读入,当向cout写入数据时,将会写到同一个窗口。

!!!note
clog关联到标准错误,默认情况下,写到clog的数据是被缓冲的。写到cerr的数据是不缓冲的。

一个使用IO库的程序

#include <iostream>
int main()
{std::cout << "Enter two numbers:" << std::endl;int v1 = 0, v2 = 0;std::cin >> v1 >> v2;std::cout << "The sum of " << v1 << " and " << v2 << " is "<< v1 + v2 << std::endl;return 0;
}

#include <iostream>告诉编译器我们想要使用iostream库。尖括号中的名字指出了一个头文件(header)。每个使用标准库设施的程序都必须包含相关的头文件。#include指令和头文件的名字必须写在同一行中。#include指令一般出现在所有函数之外,源文件的开始位置。

向流写入数据

std::cout << "Enter two numbers" << std::endl;

这条语句执行了一个表达式(expression)。在C++中,一个表达式产生一个计算结果,它由一个或多个运算对象和(通常是)一个运算符组成。这条语句中的表达式使用了输出运算符(<<)。

<<运算符接受两个运算对象:左侧必须是一个ostream对象;右侧是要打印的值。此运算符将给定的值写到给定的ostream对象中。计算结果是左侧的ostream对象。

"Enter two numbers"是一个字符串字面值常量(string literal),它是用一对双引号包围的字符序列。

endl是一个被称为操纵符(manipulator)的特殊值。写入endl的效果是结束当前行,并将与设备关联的缓冲区(buffer)中的内容刷到设备中。

!!!note
一个表达式接一个分号就是一条语句。

使用标准库中的名字

前缀std::指出名字cout和endl是定义在名为std命名空间(namespace)中的。

命名空间可以帮助我们避免不经意的名字定义冲突。标准库定义的所有名字都在命名空间std中。

从流读取数据

首先定义两个名为v1和v2的变量(variable)来保存输入:

int v1 = 0, v2 = 0;

这两个变量被定义为int类型,并初始化(initialize)为0。初始化一个变量,就是在变量创建的同时为它赋予一个值。

std::cin >> v1 >> v2;

这条语句读入输入数据。输入运算符(>>)接受一个istream作为其左侧运算对象,接受一个对象作为其右侧运算对象。它从给定的istream读入数据,并存入给定对象中。输入运算符返回其左侧运算对象作为计算结果。

注释简介

注释(comments)通常用于概述算法,确定变量的用途,或者解释晦涩难懂的代码段。编译器会忽略掉注释,因此注释对程序的行为和性能不会有任何影响。

C++中注释的种类

C++中有两种注释:单行注释和界定符注释。

注释界定符不能嵌套

界定符对形式的注释是以/*开始,以*/结束的。因此,一个注释不能嵌套在另一个注释之内。

如果在调试期间要注释掉包含界定符对形式注释的代码,最好的方式是用单行注释方式注释掉代码段的每一行。

// /*
//  * comments
//  */

控制流

语句一般是顺序执行的,语句块的第一条语句首先执行,然后是第二条,以此类推。但程序设计语言提供了多种不同的控制语句,允许我们写出更为复杂的执行路径。

while语句

while语句反复执行一段代码,直到给定条件为假为止。

while语句的形式为:

while (condition)statement

while语句的执行过程是交替地检测condition条件和执行关联的语句statement,直至condition为假时停止。所谓条件就是一个产生真或假的结果的表达式。

statement可以是语句块,也叫循环体。所谓语句块(block),就是用花括号包围的语句序列。语句块也是语句的一种,在任何要求使用语句的地方都可以使用语句块。

for语句

每个for语句都包含两部分:循环头和循环体。循环头控制循环体的执行次数,它由三部分组成:一个初始化语句(init-statement)、一个循环条件(condition)以及一个表达式(expression)。

比如:

for (int val = 1; val <= 10; ++val)sum += val;

for循环的总体执行流程:

  1. 创建变量val,将其初始化为1,它仅在循环内部存在。

  2. 检测val是否小于等于10。如果检测成功,执行循环体。若失败,退出循环。

  3. 将val的值增加1。

  4. 重复第二个步骤。

读取数量不定的输入数据

使用这样的方法连续读入数据,直到遇到文件尾(Linux下,输入CTRL+D):

while (std::cin >> value)statement

输入运算符返回其左侧对象,因此,此循环条件检测的是std::cin。

当使用一个istream对象作为条件时,其效果是检测流的状态。如果流是有效的,那么检测成功。当遇到文件结束符(end-of-file),或遇到一个无效输入时,istream对象的状态会变为无效。

if语句

if也对一个条件求值,书本里有一个完整的例子。

语法大致如此:

if (condition) {statements
} else {statements
}

类简介

在C++中,通过定义一个(class)来定义自己的数据结构。一个类定义了一个类型,以及与其关联的一组操作。

类似使用标准库设施,我们也需要使用头文件来自己的类。习惯上,头文件根据类名来命名,使用.h作为头文件的后缀。标准库的头文件通常不带后缀。

初识成员函数

什么是成员函数?

有这样的检测条件:

item1.isbn() == item2.isbn()

调用名为isbn的成员函数(member function)。成员函数是定义为类的一部分的函数。

使用**点运算符(.)**来表达我们需要“名为item1的对象的isbn成员”。点运算符只能用于类类型的对象。其左侧运算对象必须是一个类类型的对象,右侧运算对象必须是该类型的一个成员名,运算结果为右侧运算对象指定的成员。

我们使用**调用运算符(())**来调用一个函数,它是一对圆括号,里面放实参列表(可能为空)。

C++学习:第一章 开始相关推荐

  1. QT学习 第一章:基本对话框--利用Qt Designer设计多个UI界面

    QT学习 第一章:基本对话框--利用Qt Designer设计多个UI界面 效果截图: 创建上文件夹Designers,使用Designer设计三个UI界面: First.ui Second.ui T ...

  2. 逻辑学学习:第一章:导论

    逻辑学学习:第一章:导论 本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明. 开始学习逻辑学,教材为<<普通逻辑学>>,作者杨树森, ...

  3. Intel汇编语言程序设计学习-第一章 基本概念

    第一章基本概念 1.1  简单介绍 本书着重讲述MS-Windows平台上IA-32(Intel Architecture 32bit,英特尔32位体系架构)兼容微处理器的汇编语言程序设计,可以使用I ...

  4. python爬虫学习第一章

    <!DOCTYPE html> python爬虫第一章 python网络爬虫的学习 什么是网络爬虫 按照特定需求,从互联网中搜索有用信息网页进行过滤,就叫网络爬虫. 网络爬虫算法 当浏览信 ...

  5. 图解Http学习第一章

    今天正好闲来无事,顺便学习一波Http协议,感觉网络方面还是很重要的. 之前看过这本书,但是没总结也忘得差不多了,现在重新总结一遍,顺便当复习. 常规的Web访问流程: 这个就是比较基本的访问流程,不 ...

  6. 心向天蓝,Python学习第一章之列表一

    心向天蓝,Python学习第一程之列表一 下面这篇是关于列表的详细操作和介绍: 列表:是由一系列按特定顺序排列的元素组成. 在列表里,你可以加入任何你想加入的元素,可以是字母表里的任何元素,也可以是数 ...

  7. 《浅谈Cache Memory》 学习-第一章

    序 近些年,我在阅读一些和处理器相关的论文与书籍,有很多些体会,留下了若干文字.其中还是有一片领域,我一直不愿意书写,这片领域是处理器系统中的Cache Memory.我最后决定能够写下一段文字,不仅 ...

  8. javascript忍者秘籍(第二版)翻译学习 第一章 JavaScript无处不在

    前言废话(立flag) <javascript忍者秘籍第二版>这本书据说是JQUERY之父写的,emmm,肯定值得我这种菜狗来学习膜拜,所以打算花时间来把这本书通读记录一便,因为是看的英文 ...

  9. spring in action学习-第一章 spring之旅

    首先我先吐槽一下这本书的封面图,我能理解成一个包着头巾的男人举着个水壶昂首挺胸,最后给你个眼神....开玩笑的这幅插图是约旦西南部卡拉克省的居民,那里的山顶有座城堡,对死海和平原有极佳的视野,这幅图出 ...

  10. 一字一句体验语言的魅力-2:80386-datasheet翻译学习-第一章完

    1.1.4 Part IV ── Instruction Set 指令集 Parts I, II, and III present overviews of the instructions as t ...

最新文章

  1. 10万奖金:天池OCR大赛来了!
  2. 揭秘:深度网络背后的数学奥秘
  3. AIX的用户和组管理
  4. PowerDesigner的数据类型
  5. Splash 占位图适配 全面屏笔记
  6. php excel中解析显示html代码_骑士cms从任意文件包含到远程代码执行漏洞分析
  7. javascript中的this使用场景
  8. httpclient 多附件上传
  9. 重载和重写以及重写的权限问题
  10. 2015-2月的小程序们
  11. php-ews发送邮件,使用php-ews在特定日期之后收到电子邮件(Exchange Web服务)
  12. 9月8日全球域名商(国际域名)解析新增量TOP20
  13. 梯度下降算法动图_Deep Learning|神经网络原理学习笔记(5) :随机梯度下降算法SGD(附手绘图)、离线学习与在线学习...
  14. 大数据时代,我们应该具有怎样的思维方式?
  15. vue axios封装 类方法
  16. 网站运维:git工具-常用命令(5):创建远程仓库、git remote 查看远程仓库、添加远程仓库、git push 推送到远程仓库、git pull 从远程仓库拉取
  17. 支付宝前端团队详解基于Node.js Web框架Chair
  18. Visual Studio内存泄露检测工具
  19. VLDB 2022最佳研究论文:克服通信挑战,新框架SANCUS实现GNN高效训练
  20. 谷歌开源 ClusterFuzz,自动化查找并修复 bug

热门文章

  1. IDEA查看Maven路径
  2. Spring框架----基于接口的动态代理
  3. 推荐系统和搜索引擎的关系
  4. 对于Python中回调函数的理解
  5. Webstorm相关设置
  6. 用mac的chrome浏览器调试Android手机的网页
  7. python与数值计算环境安装
  8. 10-4-文章评论管理
  9. 元气骑士如何获得机器人成就皮肤_元气骑士:获得成就叹息之墙,花圃免费开,附带5000蓝币奖励...
  10. idea package自动生成_IDEA -- 自动创建POJO