当前位置: 首页 > news >正文

《C++ Primer Plus》读书笔记 第二章 开始学习C++

第二章 开始学习C++

  • 进入C++
    • main( )函数
      • 作为接口的函数头
      • 为什么main( )不能使用其他名称
    • C++注释
    • C++预处理器和iostream文件
    • 头文件名
    • 名称空间
    • 使用cout进行C++输出
      • 控制符endl
      • 换行符
    • C++源代码的格式化
      • 源代码中的标记和空白
      • C++源代码风格
  • C++语句
    • 声明语句和变量
    • 赋值语句
    • cout的新花样
  • 其他C++语句
    • 使用cin
    • 使用cout进行拼接
    • 类简介
  • 函数
    • 使用有返回值的函数
    • 函数变体
    • 用户定义的函数
      • 函数格式
      • 函数头
    • 用户定义的有返回值的函数
    • 在多函数程序中使用using编译指令
  • 编程练习答案

本章对C++程序的基本结构做一概述,并预览后面将介绍的主题,如函数和类。

进入C++

// myfirst.cpp--displays a message#include <iostream>                           // a PREPROCESSOR directive
int main()                                    // function header
{                                             // start of function bodyusing namespace std;                      // make definitions visiblecout << "Come up and C++ me some time.";  // messagecout << endl;                             // start a new linecout << "You won't regret it!" << endl;   // more output
// If the output window closes before you can read it,
// add the following code:// cout << "Press any key to continue." <<endl;// cin.get();                                                   return 0;                                 // terminate main()
}                                             // end of function body

示例代码包含下述元素

  • 注释,由前缀//标识。
  • 预处理器编译指令#include。
  • 函数头:int main( )。
  • 编译指令using namespace。
  • 函数体,用{和}括起。
  • 使用C++的cout工具显示消息的语句。
  • 结束main( )函数的return语句。

main( )函数

  • 第一行int main( )叫函数头(function heading),花括号({和})中包括的部分叫函数体。函数头对函数与程序其他部分之间的接口进行了总结;函数体是指出函数应做什么的计算机指令。
  • 在C++中,每条完整的指令都称为语句。所有的语句都以分号结束,绝对不能省略。
  • main( )中最后一条语句叫做返回语句(return statement),它结束该函数。

作为接口的函数头

  • C++函数可被其他函数激活或调用,函数头描述了函数与调用它的函数之间的接口。位于函数名前面的部分叫做函数返回类型,它描述的是从函数返回给调用它的函数的信息。函数名后括号中的部分叫做形参列表(argument list)或参数列表(parameter list);它描述的是从调用函数传递给被调用的函数的信息。

  • 通常,main( )被启动代码调用,而启动代码是由编译器添加到程序中的,是程序和操作系统(UNIX、Windows 7或其他操作系统)之间的桥梁。事实上,该函数头描述的是main( )和操作系统之间的接口。

  • 如果编译器到达main( )函数末尾时没有遇到返回语句,则认为main( )函数以如下语句结尾:

    return 0
    

    这条隐含的返回语句只适用于main( )函数,而不适用于其他函数。

为什么main( )不能使用其他名称

  • C++程序必须包含一个名为main( )的函数(不是Main( )、MAIN( )或mane( )。记住,大小写和拼写都要正确)
  • 在运行C++程序时,通常从main( )函数开始执行。因此,如果没有main( ),程序将不完整,编译器将指出未定义main( )函数。
  • 例外的情况:Windows编程中动态链接库(DLL)模块、专用环境的程序—如机器人中的控制器芯片

C++注释

  • C++注释以双斜杠(//)打头。
  • C++注释以//打头,到行尾结束。注释可以位于单独的一行上,也可以和代码位于同一行。
  • C++也能够识别C注释/* */

C++预处理器和iostream文件

  • C++和C一样,也使用一个预处理器,它处理名称以#开头的编译指令,该程序在进行主编译之前对源文件进行处理,不必执行任何特殊的操作来调用该预处理器,它会在编译程序时自动运行。
  • #include <iostream> 该编译指令导致预处理器将iostream文件的内容添加到程序中。
  • iostream文件的内容将取代程序中的代码行#include 。原始文件没有被修改,而是将源代码文件和iostream组合成一个复合文件,编译的下一阶段将使用该文件。
  • C++的输入/输出方案涉及iostream文件中的多个定义。为了使用cout来显示消息,第一个程序需要这些定义。

头文件名

  • 像iostream这样的文件叫做包含文件(include file)—由于它们被包含在其他文件中;也叫头文件(header file)—由于它们被包含在文件起始处。
  • C++编译器自带了很多头文件,每个头文件都支持一组特定的工具。
  • 对老式C的头文件保留了扩展名h(C++程序仍可以使用这种文件),而C++头文件则没有扩展名。
  • 有些C头文件被转换为C++头文件,这些文件被重新命名,去掉了扩展名h(使之成为C++风格的名称),并在文件名称前面加上前缀c(表明来自C语言)。
    在这里插入图片描述

名称空间

  • 名称空间可以用来区分不同厂商产品的同名函数。
  • using namespace std; 这个using编译指令使得std名称空间中的所有名称都可用。
  • 最好是只使所需的名称可用,如using std::cout

使用cout进行C++输出

  • cout是一个预定义对象,用来显示字符串、数字和单个字符等。
  • cout的对象属性包括一个插入运算符(<<),它可以将其右侧的信息插入到流中。
    在这里插入图片描述

控制符endl

  • endl是一个特殊的C++符号,表示一个重要的概念:重起一行。

换行符

  • C++还提供了另一种在输出中指示换行的旧式方法:C语言符号\n。
  • endl确保程序继续运行前刷新输出(将其立即显示在屏幕上);而使用“\n”不能提供这样的保证,这意味着在有些系统中,有时可能在您输入信息后才会出现提示。
  • 换行符是一种被称为“转义序列”的按键组合。

C++源代码的格式化

  • 在C++中,分号标示了语句的结尾。
  • 在C++中,回车的作用就和空格或制表符相同。
  • 在C++中,通常可以在能够使用回车的地方使用空格,反之亦然。

源代码中的标记和空白

  • 一行代码中不可分割的元素叫做标记(token)。
  • 必须用空格、制表符或回车将两个标记分开。
  • 空格、制表符和回车统称为空白(white space)。
  • 括号和逗号是不需要用空白分开的标记。
    在这里插入图片描述

C++源代码风格

  • 每条语句占一行。
  • 每个函数都有一个开始花括号和一个结束花括号,这两个花括号各占一行。
  • 函数中的语句都相对于花括号进行缩进。
  • 与函数名称相关的圆括号周围没有空白。

C++语句

// carrots.cpp -- food processing program
// uses and displays a variable#include <iostream>int main()
{using namespace std;int carrots;            // declare an integer variablecarrots = 25;            // assign a value to the variablecout << "I have ";cout << carrots;        // display the value of the variablecout << " carrots.";cout << endl;carrots = carrots - 1;  // modify the variablecout << "Crunch, crunch. Now I have " << carrots << " carrots." << endl;// cin.get();return 0;
}
  • C++程序是一组函数,而每个函数又是一组语句。
  • 声明语句创建变量,赋值语句给该变量提供一个值。

声明语句和变量

  • 声明语句指出信息的存储位置和所需的内存空间。
  • 所有变量都必须声明。
    在这里插入图片描述
  • 程序中的声明语句叫做定义声明(defining declaration)语句,简称为定义(definition)。
  • 在首次使用变量前声明它。

赋值语句

  • 赋值语句将值赋给存储单元。
  • 符号=叫做赋值运算符。
  • 可以连续使用赋值运算符。

cout的新花样

  • cout可用于数字和字符串,把值转换为合适的输出字符。
  • cout的智能行为源自C++的面向对象特性。C++插入运算符(<<)将根据其后的数据类型相应地调整其行为。

其他C++语句

// getinfo.cpp -- input and output
#include <iostream>int main()
{using namespace std;int carrots;cout << "How many carrots do you have?" << endl;cin >> carrots;                // C++ inputcout << "Here are two more. ";carrots = carrots + 2;
// the next line concatenates outputcout << "Now you have " << carrots << " carrots." << endl;// cin.get();// cin.get();return 0;
}

使用cin

  • 与cout一样,cin也是一个智能对象。它可以将通过键盘输入的一系列字符(即输入)转换为接收信息的变量能够接受的形式。

使用cout进行拼接

  • iostream文件定义了<<运算符,以便可以像下面这样合并(拼接)输出:
    cout << "Now you have " << carrots << " carrots." << endl;
    

类简介

  • 类是用户定义的一种数据类型。
  • 类定义描述的是数据格式及其用法,而对象则是根据数据格式规范创建的实体。
  • 函数可以来自函数库,类也可以来自类库。ostream和istream类就属于这种情况。
  • C++提供了两种发送消息的方式:一种方式是使用类方法(本质上就是稍后将介绍的函数调用);另一种方式是重新定义运算符,cin和cout采用的就是这种方式。

函数

// sqrt.cpp -- using the sqrt() function#include <iostream>
#include <cmath>    // or math.hint main()
{using namespace std;double area;cout << "Enter the floor area, in square feet, of your home: ";cin >> area;double side;side = sqrt(area);cout << "That's the equivalent of a square " << side << " feet to the side." << endl;cout << "How fascinating!" << endl;// cin.get();// cin.get();return 0;
}
  • C++函数分两种:有返回值的和没有返回值的。

使用有返回值的函数

  • 有返回值的函数将生成一个值,而这个值可赋给变量或在其他表达式中使用。
  • 被调用的函数叫做被调用函数(calledfunction),包含函数调用的函数叫做调用函数(calling function)。
  • 圆括号中的值是发送给函数的信息,这被称为传递给函数。该值叫做参数。
  • 发送回去的值叫做函数的返回值(return value)。
    在这里插入图片描述
    在这里插入图片描述
  • C++程序应当为程序中使用的每个函数提供原型。函数原型之于函数就像变量声明之于变量—指出涉及的类型。如 double sqrt(double);
  • 原型结尾的分号表明它是一条语句,这使得它是一个原型,而不是函数头。
  • 可以用两种方法来实现: 在源代码文件中输入函数原型;包含头文件如cmath,其中定义了原型。
  • 原型只描述函数接口,它描述的是发送给函数的信息和返回的信息。而函数定义包含了函数的代码。
  • 应在首次使用函数之前提供其原型。通常的做法是把原型放到main( )函数定义的前面。

函数变体

  • 有些函数需要多个参数,参数间用逗号分开,double pow(double, double);
  • 有些函数不接受任何参数,int rand(void);
  • 有些函数没有返回值,void bucks(double);

用户定义的函数

// ourfunc.cpp -- defining your own function
#include <iostream>
void simon(int);    // function prototype for simon()int main()
{using namespace std;simon(3);       // call the simon() functioncout << "Pick an integer: ";int count;cin >> count;simon(count);   // call it againcout << "Done!" << endl;// cin.get();// cin.get();return 0;
}void simon(int n)   // define the simon() function
{using namespace std;cout << "Simon says touch your toes " << n << " times." << endl;
}                   // void functions don't need return statements
  • 标准C库提供了140多个预定义的函数。如果其中的函数能满足要求,则应使用它们。
  • 自己定义函数通常把原型放到main()定义之前,代码放在main()的后面。

函数格式

  • 函数定义采用统一格式,有一个函数头;然后是花括号中的函数体。
    在这里插入图片描述
  • C++不允许将函数定义嵌套在另一个函数定义中。每个函数定义都是独立的,所有函数的创建都是平等的。

函数头

在这里插入图片描述

  • main( )的返回值并不是返回给程序的其他部分,而是返回给操作系统。

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

// convert.cpp -- converts stone to pounds
#include <iostream>
int stonetolb(int);     // function prototype
int main()
{using namespace std;int stone;cout << "Enter the weight in stone: ";cin >> stone;int pounds = stonetolb(stone);cout << stone << " stone = ";cout << pounds << " pounds." << endl;// cin.get();// cin.get();return 0;
}int stonetolb(int sts)
{return 14 * sts;
}

在这里插入图片描述
函数特性:

  • 有函数头和函数体;
  • 接受一个参数;
  • 返回一个值;
  • 需要一个原型。

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

当前通行的理念是,只让需要访问名称空间std的函数访问它是更好的选择。
让程序能够访问名称空间std的方法有多种:

  • 将using namespace std;放在函数定义之前,让文件中所有的函数都能够使用名称空间std中所有的元素。
  • 将using namespace std;放在特定的函数定义中,让该函数能够使用名称空间std中的所有元素。
  • 在特定的函数中使用类似using std::cout;这样的编译指令,而不是using namespace std;,让该函数能够使用指定的元素,如cout。
  • 完全不使用编译指令using,而在需要使用名称空间std中的元素时,使用前缀std::。

编程练习答案

具体代码详见《C++ Primer Plus(第6版)》编程练习源代码

http://www.dtcms.com/a/410220.html

相关文章:

  • 【精】C# 精确判断XML是否存在子节点
  • 从零开始学神经网络——GRU(门控循环单元)
  • XML中的 CDATA mybaitis xml中的 <![CDATA[ xxxx ]]>
  • iOS 26 系统流畅度剖析:Liquid Glass 动画表现 + 用户反馈
  • JavaScript学习笔记(十四):ES6 Set函数详解
  • 应用网站如何做wordpress 不同数据库
  • Nginx 访问控制、用户认证与 HTTPS 配置指南
  • 老板让做公司网站设计社交网站开发公司
  • 电影级深黄色调人像风光摄影后期Lr调色教程,手机滤镜PS+Lightroom预设下载!
  • 【C++】:模板进阶
  • 【java 语法】Java枚举(Enum)全面详解
  • 栈的顺序存储基本概述
  • 休闲食品网站建设中土集团北方建设有限公司网站
  • 车载以太网100/1000BASE-T1物理层的基础概念和应用注意事项
  • Bandzip去除公告
  • 上颌磨牙根方解剖特点与拔牙器械应用策略
  • 三数之和_优选算法(C++)双指针
  • 鸿蒙开发 一 (九)、嵌套滚动,Scroll + List
  • 【展厅多媒体】互动虚拟翻书技术应用全解析
  • 外贸网站建设定制开发小型办公室中式装修
  • WaveTerminal+cpolar:命令行工具的远程协作新体验
  • 基于C++的分布式RPC框架(一)
  • 【有源码】基于Hadoop+Spark的AI就业影响数据分析与可视化系统-AI驱动下的就业市场变迁数据分析与可视化研究-基于大数据的AI就业趋势分析可视化平台
  • 爆炸特效:Unity+Blender-02-火焰
  • 设计模式-结构性设计模式(针对类与对象的组织结构)
  • STM32--大功率mos管驱动模块
  • 中国铁路监理建设协会网站济南网站建设公司
  • 解析UART空闲中断与DMA接收机制
  • 重庆网站建设百度推广wordpress 随机一句话
  • 企业数据采集实战(二):设备多样性与异构性问题的挑战