读书笔记1-C++ Primer Plus

C++是在C语言基础上开发的一种集面向对象编程(OOP)、通用编程和传统的过程化编程于一体的编程语言。本书是根据2003年的ISO/ANSI C++标准编写的,通过大量短小精悍的程序详细而全面地阐述了C++的基本概念和技术。

全书分17章和10个附录,分别介绍了C++程序的运行方式、基本数据类型、复合数据类型、循环和关系表达式、分支语句和逻辑操作符、函数重载和函数模板、内存模型和名称空间、类的设计和使用、多态、虚函数、动态内存分配、继承、代码重用、友元、异常处理技术、string类和标准模板库、输入/输出等内容。

 第一章——预备知识

主要讲了C++的简介,C++简史,包括了C++的可移植性和标准和程序创建的技巧。详细的介绍了面对的对象的编程,其实如果详细的了解这一部分知识的话,可以阅读一下这本书。

 第二章——开始学习C++

1.进入C++

1.1.cout

是C++的生成字符输出

cout是C++标准库中的一个输出流对象,用于将字符或其他数据类型输出到屏幕或其他目标设备。它支持对各种类型的数据进行格式化输出,并提供了一系列控制输出格式和输出精度的方法。

下面是一个使用cout输出字符串和数字的示例程序:

#include <iostream>
using namespace std;int main() {// 输出字符串cout << "Hello, world!" << endl;// 输出数字int num1 = 123;double num2 = 3.1415926;cout << "num1 = " << num1 << endl;  // 输出整数cout << "num2 = " << num2 << endl;  // 输出浮点数// 输出控制符cout << "num1 = " << num1 << hex << " (hex)" << endl;  // 输出十六进制格式return 0;
}

在这个程序中,我们首先使用cout输出字符串"Hello, world!",并在末尾加上endl换行符。接着,我们定义了两个变量num1num2,分别为整型和双精度浮点型,并使用cout输出这两个变量的值。最后,我们使用<<运算符向cout中加入控制符hex,使得num1以十六进制格式输出。

输出结果如下:

Hello, world!
num1 = 123
num2 = 3.14159
num1 = 7b (hex)

可以看到,使用cout可以方便地输出不同类型的数据,并且通过控制符可以对输出格式进行自定义。注意

1.2.endl

是C++中的一个控制符,表示换行并刷新输出缓冲区。它实际上是一个被定义在<iostream>头文件中的特殊对象。

当使用cout输出数据时,数据通常会被先存储在输出缓冲区中,而不是立即输出到屏幕上。这样做可以提高输出效率。然而,在某些情况下,我们希望立即将缓冲区的内容输出到屏幕上,而不是等待缓冲区满或程序结束。这时就可以使用endl来完成这个操作。

endl的作用有两个:

  1. 在输出流中插入一个换行符 \n
  2. 刷新输出流,强制将缓冲区的内容立即输出到目标设备上(例如屏幕)。

使用endl的效果相当于连续使用\nflush两个操作符。

例如,在前面提到的示例程序中,我们使用cout << "Hello, world!" << endl;语句输出字符串,并在末尾加上endl。这样做的效果是输出字符串后立即换行,并将缓冲区的内容刷新到屏幕上,保证输出的即时性。

需要注意的是,由于刷新缓冲区会导致性能损失,因此在输出大量数据时,过多使用endl可能会减慢程序运行速度。在这种情况下,建议使用\n换行符来实现换行,而不是每次都刷新缓冲区。

1.3    .cpp 注意.

.cpp是C++源代码文件的扩展名,通常用于保存C++程序的源代码。C++程序可以由多个.cpp文件组成,并通过编译链接生成可执行文件。

在一个.cpp文件中,通常包含了程序的一部分源代码,可以定义变量、函数、类等各种程序元素。例如下面是一个简单的C++程序示例,它定义了一个main()函数和一个add()函数:

#include <iostream>
using namespace std;int add(int a, int b) {return a + b;
}int main() {int a = 1, b = 2;cout << "a + b = " << add(a, b) << endl;return 0;
}

这个程序中,我们首先使用#include预处理指令引入了<iostream>头文件,以便使用标准输入输出库。接着定义了一个add()函数,用于计算两个整数的和。最后,在main()函数中定义了两个整型变量ab,并使用cout输出它们的和,最后返回0表示程序正常结束。

在编写完成这个程序后,我们可以将其保存为test.cpp文件,然后使用C++编译器进行编译。编译器会将.cpp文件编译成机器可执行的二进制文件,最终生成可执行文件。

 1.4 using namespace std;

using namespace std;

using namespace std; 是一个C++中的命名空间声明语句,它用于指定当前代码中使用标准命名空间(std)中的所有成员,以便我们可以直接使用这些成员而不需要添加命名空间前缀。

在C++标准库中,标准命名空间 std 包含了很多有用的类、函数和对象,例如输入输出流对象 coutcin,字符串类 string,以及很多其他常用的库函数。为了使用这些库函数和对象,我们通常需要在代码中引入 std 命名空间。

例如,如果我们想要使用 cout 对象进行输出,但没有使用 using namespace std;,那么我们需要写成 std::cout

#include <iostream>int main() {std::cout << "Hello, world!" << std::endl;return 0;
}

然而,如果我们在代码的开头加上了 using namespace std;,那么我们可以直接使用 cout,而无需添加 std:: 前缀:

#include <iostream>
using namespace std;int main() {cout << "Hello, world!" << endl;return 0;
}

需要注意的是,在大型项目中,为了避免命名冲突,通常不推荐在头文件中使用 using namespace std;,而是在源文件中使用。另外,建议尽量避免在全局范围内使用 using namespace std;,而是在需要使用的局部作用域中进行声明,以减少潜在的命名冲突问题。

2.C语言的输出输入和C++语言的输入输出

C语言中的输入输出函数主要有 printfscanf。其中,printf 函数用于输出格式化的文本,而 scanf 函数用于从标准输入读取格式化的数据。例如:

#include <stdio.h>int main() {int a, b;printf("请输入两个整数:");scanf("%d %d", &a, &b);printf("您输入的两个整数分别是:%d 和 %d\n", a, b);return 0;
}

C++语言中的输入输出主要是使用标准库中提供的输入输出流对象,其中 cout 用于输出数据,cin 用于输入数据。例如:

#include <iostream>
using namespace std;int main() {int a, b;cout << "请输入两个整数:";cin >> a >> b;cout << "您输入的两个整数分别是:" << a << " 和 " << b << endl;return 0;
}

与C语言不同,C++中的输入输出流对象可以进行类型检查和类型转换,因此更加灵活方便。此外,C++还提供了很多其他的输入输出方式,例如文件流、字符串流等,使其在处理各种输入输出场景时更加强大和灵活。

当用户输入两个整数 3 和 5 时,C语言的输出结果为:

请输入两个整数:3 5
您输入的两个整数分别是:3 和 5

而C++语言的输出结果为:

请输入两个整数:3 5
您输入的两个整数分别是:3 和 5

两者的输出结果是相同的,都是将用户输入的两个整数打印出来。

3.main函数

C++程序的入口函数为 main 函数,该函数必须包含在程序中。C++程序从 main 函数开始执行,执行完 main 函数后程序结束。

main 函数的一般形式如下:

int main() {// 函数体return 0;
}

其中,int 是函数返回类型,表示该函数返回一个整数类型的值;main 是函数名;() 是参数列表,表示该函数没有参数;{} 中是函数体,表示该函数所要执行的代码;return 0; 表示该函数返回一个值为 0 的整数。

可以看到,main 函数的返回值类型为 int,这也是C++中的特殊之处。当程序正常退出时,main 函数应该返回 0,表示程序运行成功。如果程序异常终止或出现错误,可以返回其他非零值来指示错误码。

例如,下面是一个简单的 C++ 程序,它输出 "Hello, world!":

#include <iostream>
using namespace std;int main() {cout << "Hello, world!" << endl;return 0;
}

当程序运行成功时,它将输出 "Hello, world!",并返回值为 0。

为什么不能使用其他名称?

在C++中,main 函数是程序的入口函数,在程序启动时首先被调用。根据C++的语法规定,main 函数必须使用特定的名称 main,否则编译器将无法正确识别和执行程序的入口。

C++编译器在编译过程中会按照一定的规则寻找 main 函数,并将其作为程序的入口点。如果将 main 函数命名为其他名称,编译器就无法找到程序的入口,从而无法正确执行。

此外,C++标准对 main 函数的签名(参数类型和返回类型)也有明确的规定。根据C++标准,main 函数的返回类型必须是 int,并且不允许有任何参数。如果使用其他名称或者修改返回类型或参数列表,都将违反C++语法规定。

综上所述,为了确保程序的正确性和可移植性,我们必须使用 main 作为入口函数的名称,并且遵循标准的参数类型和返回类型。

未完待续——————

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/589633.shtml

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

相关文章

使用WAZUH检测LD_PRELAOD劫持、SQL注入、主动响应防御

目录 1、检查后门 使用工具检测后门 1.chkrootkit 2.rkhunter 手动检查文件 检查ld.so.preload文件 2、检测LD_PRELOAD ubuntu配置 wazuh配置 3、检测SQL注入 ubuntu配置 攻击模拟 4、主动响应 wauzh的安装以及设置代理可以参考本篇&#xff1a;WAZUH的安装、设置…

Apache Flink连载(二十三):Flink HA - Flink基于Yarn HA

🏡 个人主页:IT贫道_大数据OLAP体系技术栈,Apache Doris,Clickhouse 技术-CSDN博客 🚩 私聊博主:加入大数据技术讨论群聊,获取更多大数据资料。 🔔 博主个人B栈地址:豹哥教你大数据的个人空间-豹哥教你大数据个人主页-哔哩哔哩视频 目录 1. Yarn HA配置 ​​​​…

Cache替换算法

由于Cache很小&#xff0c;主存很大&#xff0c;Cache很容易装满&#xff0c;Cache满了怎么办&#xff1f; ——采用替换算法。 全相联映射&#xff1a;Cache完全满了才需要替换&#xff0c;需要在全局中选择替换哪一块。直接映射&#xff1a;如果对应位置非空&#xff0c;则…

linux线程与进程

简要 在Linux系统中&#xff0c;进程&#xff08;Process&#xff09;和线程&#xff08;Thread&#xff09;是操作系统中两个重要的概念&#xff0c;它们都是用于执行程序的执行单元&#xff0c;但有一些关键的区别。 在Linux系统中&#xff0c;可以使用fork系统调用创建新…

Vue3-30-路由-嵌套路由的基本使用

什么是嵌套路由 嵌套路由 &#xff1a;就是一个组件内部还希望展示其他的组件&#xff0c;使用嵌套的方式实现页面组件的渲染。 就像 根组件 通过路由渲染 普通组件一样&#xff0c;嵌套路由也是一样的道理。 嵌套路由的相关关键配置 1、<router-view> 标签 声明 被嵌套组…

在 Spring 中操作 Redis

&#x1f9f8;欢迎来到dream_ready的博客&#xff0c;&#x1f4dc;相信您对博主首页也很感兴趣o (ˉ▽ˉ&#xff1b;) &#x1f4dc;redis和缓存及相关问题和解决办法 什么是缓存预热、缓存穿透、缓存雪崩、缓存击穿 目录 1、引入依赖 2、对 Redis 的配置文件进行书写 3、S…

kivy PageLayout 的说明及例子

PageLayout 是 Kivy GUI 框架中的一个布局管理器&#xff0c;它允许开发者在同一个窗口中放置多个页面&#xff0c;用户可以通过滑动来浏览这些页面。PageLayout 的工作方式类似于一个可以滑动的标签页&#xff08;TabbedPanel&#xff09;&#xff0c;但其页面可以自由调整大小…

Linux常用命令大全总结及讲解(超详细版)

前言&#xff1a; Linux 是一个基于Linux 内核的开源类Unix 操作系统&#xff0c;Linus Torvalds于 1991 年 9 月 17 日首次发布的操作系统内核。Linux 通常打包为Linux 发行版。 Linux 最初是为基于Intel x86架构的个人计算机开发的&#xff0c;但此后被移植到的平台比任何其…

K8S 中对 Windows 节点的利用

目录 漏洞概述 漏洞详情 ​编辑 漏洞验证 补丁分析 在集群中探索 参考资料 在许多组织中&#xff0c;所运行的很大一部分服务和应用是 Windows 应用。Windows 容器提供了一种封装进程和包依赖项的方式&#xff0c;从而简化了 DevOps 实践&#xff0c;令 Windows 应用程序…

【xdma】 pcie.bar设置

FPGA优质开源项目– PCIE通信 xdma 两者保持一致 FPGA开源项目 – PCIE I/O控制卡 xdma PCIe的XDMA应用 读写部分分为两种&#xff0c;一种是数据的读写&#xff0c;另一种是配置数据的读写&#xff0c;在数据读写部分&#xff0c;DMA通过MIG控制DDR完成数据读写。配置数据…

使用 Tkinter 制作一个进制转换工具,好用!

在平时工作学习当中&#xff0c;我们经常会编写一些简单的 Python GUI 工具&#xff0c;以此来完成各种各样的自动化任务&#xff0c;比如批量处理文件&#xff0c;批量处理图片等等。当我们进行这些工具的编写之时&#xff0c;往往只关注了功能的实现&#xff0c;而忽略了页面…

基于Docker的软件环境部署脚本,持续更新~

使用时CtrlF搜索你想要的环境&#xff0c;如果没有你想要的环境&#xff0c;可以评论留言&#xff0c;会尽力补充。 本文提供的部署脚本默认参数仅适合开发测试&#xff0c;请根据实际情况调节参数。 数据库 MySQL version: 3.9 services:mysql:image: mysql:8.0.35container…

【Unity美术】Unity工程师对3D模型需要达到的了解【二】

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;Uni…

一元函数微分学——刷题(8

目录 1.题目&#xff1a;2.解题思路和步骤&#xff1a;3.总结&#xff1a;小结&#xff1a; 1.题目&#xff1a; 2.解题思路和步骤&#xff1a; 先看A&#xff0c;既然存在&#xff0c;那么f(x)和x属于同阶无穷小&#xff0c;所以f(0)0&#xff0c;没问题 再看C&#xff0c;结…

UntiyShader(七)Debug

目录 前言 一、利用假彩色图像 二、利用Visual Studio 三、帧调试器 前言 Debug&#xff08;调试&#xff09;&#xff0c;是程序员检查问题的一种方法&#xff0c;对于一个Shader调试更是一种噩梦&#xff0c;这也是Shader难写的原因之一——如果效果不对&#xff0c;我们…

ubuntu22.04安装anacoda遇到的坑

这几天把用了3年的windows10换成了ubuntu22.04 各种环境都得配置&#xff0c;本文记录下遇到的坑。 1、anacoda在ubuntu上也可以用官方也提供了安装包&#xff0c;但是没有图形界面&#xff0c;需要以命令行的方式安装和运行配置 1.1 安装&#xff1a;官网下载后&#xff0c;…

极速文件搜索工具Everything结合内网穿透实现远程搜索本地文件

文章目录 前言1.软件安装完成后&#xff0c;打开Everything2.登录cpolar官网 设置空白数据隧道3.将空白数据隧道与本地Everything软件结合起来总结 前言 要搭建一个在线资料库&#xff0c;我们需要两个软件的支持&#xff0c;分别是cpolar&#xff08;用于搭建内网穿透数据隧道…

ShuffleNet V2:高效CNN架构设计实用指南

摘要 目前&#xff0c;神经网络架构设计主要以计算复杂度的间接指标&#xff08;即 FLOPs&#xff09;为指导。然而&#xff0c;直接指标&#xff08;如速度&#xff09;还取决于其他因素&#xff0c;如内存访问成本和平台特性。因此&#xff0c;这项工作建议在目标平台上评估…

1 - 数据库服务概述 | 构建MySQL服务 | 数据库基本管理 | MySQL基本类型

数据库服务概述 | 构建MySQL服务 | 数据库基本管理 | MySQL基本类型 数据库服务概述构建mysql服务安装mysql软件包连接mysql服务器 修改密码 密码管理修改密码策略&#xff08;需要登陆&#xff09;破解数据库管理员root密码&#xff08;数据库服务处于运行状态但是root忘记了密…

win/linux 环境查看动态库包含的函数

我们打包了动态库&#xff0c;还要查看是否包含一些函数&#xff0c;需要导出这些函数 在win 环境下可以使用 .def 格式的文件进行操作 ######################################################### 跳过这一步&#xff0c;回到主题&#xff0c;在两个系统平台如何查看动态库包…