详细介绍:《C++ Primer Plus》读书笔记 第二章 开始学习C++

news/2025/9/30 19:09:53/文章来源:https://www.cnblogs.com/lxjshuju/p/19121671

第二章 开始学习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.mzph.cn/news/923174.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网站后台数据库下载企业网站服务类型

纯HTML外贸公司通用企业html网站模板源码 源码地址&#xff1a;https://download.csdn.net/download/Highning0007/89150720

【虚拟机】“:域名解析出现暂时性错误”VMware配置DNS

前言 最近家里路由器换了,虚拟机忘记重新配置,导致下午在apt的时候出现这个错误环境 软件:VMware Workstation 17 Pro 系统:Windows 10 网络:使用NAT模式作为虚拟机网络 步骤2. 选中虚拟机使用的虚拟网络,点击NA…

十堰网站建设电话wordpress 登录地址

1.Hazelcast介绍 Hazelcast是Hazelcast公司开源的一款分布式内存数据库产品&#xff0c;提供弹性可扩展、高性能的分布式内存计算。并通过提供诸如Map&#xff0c;Queue&#xff0c;ExecutorService&#xff0c;Lock和JCache等Java的许多开发人员友好的分布式实现。 Hazelcast优…

双抗 ADC:如何突破传统 ADC 瓶颈,成为癌症治疗的精准杀伤利器?

在癌症靶向治疗领域,单克隆抗体(单抗)药物曾凭借 “精准识别肿瘤靶点” 的优势改变治疗格局,但随着临床应用深入,其局限性逐渐凸显 —— 癌症发病机制复杂,多靶点协同驱动肿瘤进展、单一靶点靶向易引发耐药、肿瘤…

通州网站建设公司如何建立自己的公司

前言&#xff1a;博主第一次接触MongoDB&#xff0c;看了一圈网上现有的教程&#xff0c;不是缺少细节就是有问题没交代清楚&#xff0c;特整理了一下自己安装运行的过程&#xff0c;从下载安装到开机自启&#xff0c;全程细节齐全、图文并茂、简单易懂。 目录 1. 从官网下载2…

电子商务网站建设预算表seo是指什么岗位

使用 netstat 检查端口 netstat 是一个命令行工具&#xff0c;可以提供有关网络连接的信息。 netstat - atulnp会显示所有端口和所有对应的程序&#xff0c;用grep管道可以过滤出想要的字段 -a &#xff1a;all&#xff0c;表示列出所有的连接&#xff0c;服务监听&#xff…

网站备案域名需要解析到备案服务器吗设计软件的软件

第一、搭建python环境 安装python 第二、下载Gstreamer 下载Gstreamer 第三、编写 GStreamer 插件 编写 GStreamer 官方资料 其他 第四、Gstreamer中文文档 中文文档

【软件架构设计(40)】数据库规范化与性能优化 - 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

AI+手搓第一个AI Agent“AI胜铭兰”

​ 上次开发了一个MCP云部署平台。时隔将近4个月,第二个项目AI Agent“AI胜铭兰”终于开发完且上线了。 项目介绍: 第二个项目是建立在第一个项目的基础上的。所以功能可以做到定制化开发。每个MCP开发好只需要配置下…

开发一套网站价格淘宝网站如何推广

因为有个需求&#xff0c;需要处理文件夹内所有txt文件&#xff0c;将txt里面的数据筛选&#xff0c;重新存储。 虽然手工可以做&#xff0c;但想到了python一直主张的是自动化测试&#xff0c;就想试着写一个自动化处理数据的程序。 一.分析数据格式 需要处理的数据是txt格式存…

基于JDK17的GC调优策略

基于JDK17的GC调优策略 一、JVM 参数分类(三类核心参数) JVM 参数按稳定性分为三类,不同类别对应不同使用场景和查看方式,具体如下表:参数类别 标识符号 稳定性 查看命令 常用示例标准参数 - 开头 所有 HotSpot 均…

成都网站建设案例单招网网站推广人员怎么算业绩

Spring Spring Cache 注释驱动的 Spring cache 缓存介绍使用 Spring 2.5 注释驱动的 IoC 功能虚拟化 libvirt kvm 虚拟机上网 – Bridge桥接KVM详解&#xff0c;太详细太深入了&#xff0c;经典Tomcat Linux机器同时运行两个tomcat点评&#xff1a;主要是那张图片的配置 Nginx …

福安 网站设计wordpress卸载插件

因个人需要&#xff0c;mkfs.ext3 但是项目中还没有这个命令 所以琢磨了半天 这里将其小记一下 在buildrootfsz中&#xff0c;需要将e2fsprogs 勾选上然后重新编译就好了 make menuconfig Target packages-> Filesystem and flash utilities-> e2fsprogs

【MC】我的世界schematic方块坐标提取转为json

前言 主包最近在搞mc广州塔灯光效果的复刻计划(请看合集),由于主包没学过着色器编程,但是目前而言,最大的问题已经转化为只要控制每个方块的灯光颜色就够了。 所以想着用three.js做个轻量化的广州塔灯光模拟器,然…

Jenkins+IIS+Bonobo.Git.Server 搭建适用dotnet开发者的小团队的devops环境

前言: 1、在一个小团队里面,可能我们既是开发(前端+后端)也是运维还是售前售后服务。我们样样都得会,但说实话,样样都不是很精!但是我们也梦,梦想着一切能像大厂那样,开发是开发,运维是运维,各司其职。作为…

电脑开机显示屏表现无信号怎么办 原因及解决方法

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

JDK17新特性梳理

JDK17新特性梳理 一、为什么JDK17生态强制升级: 业界长期 “你发任你发,我用 Java8”,但 Spring Framework 6.0+ 明确要求 Java 17+,Spring Boot 3.2+ 不仅要求 Java 17+,还需依赖 Spring Framework 6.1.1+,且仅…

数据结构学习随笔 第一章

数据结构学习随笔 第一章该内容全部引用于 《数据结构 C 语言 第二版》 严蔚敏 李冬梅 吴伟民 著绪论 只有清楚数据的内在联系,合理地组织数据,才能对它们进行有效的处理,设计出高效的算法。 1.1 数据结构研究的内容…

函数-参数+作用域

参数:定义函数时(参数常见的使用):1. def i(num)  2. def i(num1,num2 = 自己定义)  3.def i(*arg,*kwarg)调用函数时 (参数的传入):位置参数>关键字参数不定长参数:*args:调用函数时使用位置传…

怎么给网站制作二维码毕业设计做网站好的想法

互联网IT外包15年,讲述外包那些事;让您外包项目少花钱,办好事&#xff01;IT外包最大隐形成本-沟通成本&#xff1a;客户叙述大概需求,IT公司说一做一,最后开发项目细节大堆BUG,毫无用户体验感,最后项目一拖再拖,无限延期&#xff01;究其原因,客户非IT行内人,对系统功能及流程…