当前位置: 首页 > 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 directiveint 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),它结束该函数。

作为接口的函数头

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

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

C++注释

C++预处理器和iostream文件

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

头文件名

名称空间

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

使用cout进行C++输出

控制符endl

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

换行符

C++源代码的格式化

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

源代码中的标记和空白

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进行拼接

类简介

  • 类是用户定义的一种数据类型。
  • 类定义描述的是数据格式及其用法,而对象则是根据数据格式规范创建的实体。
  • 函数可以来自函数库,类也可以来自类库。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( )函数定义的前面。

函数变体

用户定义的函数

// 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++不允许将函数定义嵌套在另一个函数定义中。每个函数定义都是独立的,所有函数的创建都是平等的。

函数头

在这里插入图片描述

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

// convert.cpp -- converts stone to pounds
#include <iostream>int stonetolb(int);     // function prototypeint 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.hskmm.com/?act=detail&tid=21629

相关文章:

  • 【虚拟机】“:域名解析出现暂时性错误”VMware配置DNS
  • 双抗 ADC:如何突破传统 ADC 瓶颈,成为癌症治疗的精准杀伤利器?
  • 微信聊天记录移动到外置磁盘后,如何解决无法引导聊天记录
  • AI+手搓第一个AI Agent“AI胜铭兰”
  • 基于JDK17的GC调优策略
  • 【MC】我的世界schematic方块坐标提取转为json
  • Jenkins+IIS+Bonobo.Git.Server 搭建适用dotnet开发者的小团队的devops环境
  • JDK17新特性梳理
  • 完整教程:Nginx 高级配置指南:Rewrite、If判断、浏览器分离与防盗链
  • 数据结构学习随笔 第一章
  • 函数-参数+作用域
  • 用 Nim 实现英文数字验证码识别
  • 抓紧上车,别再错过啦, Github 开源后台管理平台,Naive UI !!!
  • 深入解析:【网络编程】套接字入门:网络字节序与套接字种类剖析
  • 地产行业,居然还有这样的开发商 - 智慧园区
  • Tita项目与绩效一体化管理:重构组织效能的数字化中枢
  • 实用指南:电子电气架构 --- 智能座舱域环境感知和人机交互系统
  • 强化学习(二十二)-MADDPG
  • GLM-4.6与DeepSeek-V3.2-Exp发布
  • 2025.9.30——1黄
  • 【半导体物理 | 笔记】第二章 半导体中杂质和缺陷能级
  • 基于内容可信空间的医疗行业机遇研究报告
  • v-show会导致重绘还是重排?
  • M3-Agent:看见、听见、记住与推理:具备长期记忆的多模态智能体
  • 20250930
  • 阿里云发布《AI 原生应用架构白皮书》
  • NVR接入录像回放平台EasyCVR智慧农田可视化视频监控方案
  • sql server 版本查询
  • Matlab dsp工具箱可以实现定点FFT的功能
  • MySQL悲观锁(排他锁)级别