读书笔记1-C++ Primer Plus

news2025/1/17 16:43:20

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.coloradmin.cn/o/1348526.html

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

相关文章

【Spring】AOP原来如此

AOP概述 什么是AOP的技术&#xff1f; 在软件业&#xff0c;AOP为Aspect Oriented Programming的缩写&#xff0c;意为&#xff1a;面向切面编程AOP是一种编程范式&#xff0c;隶属于软工范畴&#xff0c;指导开发者如何组织程序结构AOP最早由AOP联盟的组织提出的,制定了一套…

如何在VSCode搭建ESP-IDF开发ESP32

文章目录 概要安装VScode安装ESP-IDF插件使用官方例程小结 概要 ESP-IDF(Espressif IoT Development Framework) 即乐鑫物联网开发框架&#xff0c;它基于 C/C 语言提供了一个自给自足的 SDK&#xff0c;可为在 Windows、Linux 和 macOS 系统平台上开发 ESP32 应用程序提供工具…

【单片机项目实战】温度控制系统

本项目的主要作用是实现温度调控&#xff0c;通过设定一个预定的温度值&#xff0c;实现实时检测外界温度&#xff0c;当外界温度小于预定值时&#xff0c;电机正转&#xff0c;实现降温效果&#xff1b;当外界温度大于预定值时&#xff0c;电机反转&#xff0c;实现升温效果&a…

神秘的Cookie和Session

Cookie 1.Cookie是什么&#xff1f; Cookie是浏览器提供的持久化储存数据的方式。 2.从哪里来&#xff1f; Cookie从服务器中来&#xff0c;存储到客户端中。一个客户端就对应着一个浏览器。 服务器代码中决定了什么样的数据会储存到客户端中&#xff0c;通过HTTP相应的Se…

C# WPF上位机开发(以始为终,寻找真实的上位机需求)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 c# wpf、qt、mfc这些上位机的需求是真实存在的&#xff0c;在现实中有很多应用的地方&#xff0c;这一点大家都很清楚。而程序员本身呢&#xff0c…

0101包冲突导致安装docker失败-docker-云原生

文章目录 1 前言2 报错3 解决结语 1 前言 最近在学习k8s&#xff0c;前置条件就是要安装指定版本的docker&#xff0c;命令如下 yum install -y docker-ce-20.10.7 docker-ce-cli-20.10.7 containerd.io-1.4.62 报错 file /usr/libexec/docker/cli-plugins/docker-buildx fr…

企业网盘的价值与用途:一篇文章带您了解核心功能与优势

企业网盘是当下企业管理中热度高居不下的话题&#xff0c;那么企业网盘到底是什么&#xff1f;企业网盘有什么用&#xff1f; 企业网盘是什么&#xff1f; 企业网盘是基于云计算理念推出的企业数据网络存储和管理解决方案&#xff0c;通俗来讲&#xff0c;企业网盘就是一个企…

算法基础day1

归并排序模版 #include <iostream> using namespace std; int n; const int N 1e610; int q[N],tmp[N]; void merge_sort(int l,int r,int q[]){if(l>r) return;int mid lr>>1;merge_sort(l,mid,q);merge_sort(mid1,r,q);//归并的的过程int k0,il,jmid1;while(…

MAC 中多显示器的设置(Parallels Desktop)

目录 一、硬件列表&#xff1a; 二、线路连接&#xff1a; 三、软件设置&#xff1a; 1. 设置显示器排列位置及显示参数 2. 分别设置外接显示器为&#xff1a;扩展显示器&#xff0c;内建显示器为主显示器 3. 设置Parallels Desktop屏幕参数 四、结果 一、硬件列表&a…

小白学 PyTorch 系列:54个超强 pytorch 操作

最近观察到一个有趣的趋势&#xff0c;越来越多的人在学术界热衷于学习和应用PyTorch。在工业界&#xff0c;虽然仍有一些项目在延续使用之前的深度学习框架&#xff0c;但 PyTorch 的影响力也在逐渐渗透。 对于昨天为什么没发文&#xff0c;原因很心酸。把 PyTorch 的这篇文章…

亚马逊云科技Amazon Q,一款基于生成式人工智能的新型助手

近日&#xff0c;亚马逊云科技宣布推出Amazon Q&#xff0c;这是一款基于生成式人工智能&#xff08;AI&#xff09;的新型助手&#xff0c;专为辅助工作而设计&#xff0c;可以根据您的业务量身定制。通过连接到公司的信息存储库、代码、数据和企业系统&#xff0c;可以使用Am…

Vue2中使用echarts,并从后端获取数据同步

一、安装echarts npm install echarts -S 二、导入echarts 在script中导入&#xff0c;比如&#xff1a; import * as echarts from "echarts"; 三、查找要用的示例 比如柱状图 四、初始化并挂载 <template><div id"total-orders-chart" s…

归并算法排序

目录 归并排序 逆序对的数量 归并排序 题目如下&#xff1a; 给定你一个长度为 n 的整数数列。 请你使用归并排序对这个数列按照从小到大进行排序。 并将排好序的数列按顺序输出。 输入格式&#xff1a; 输入共两行&#xff0c;第一行包含整数 n。 第二行包含 n 个整数&…

CEC2017(Python):差分进化算法DE求解CEC2017

一、CEC2017简介 参考文献&#xff1a; [1]Awad, N. H., Ali, M. Z., Liang, J. J., Qu, B. Y., & Suganthan, P. N. (2016). “Problem definitions and evaluation criteria for the CEC2017 special session and competition on single objective real-parameter numer…

Android 实现 Slots 游戏旋转效果

文章目录 前言一、效果展示二、代码实现1.UI布局2.SlotAdapter2.SlotsActivity 总结 前言 slots游戏&#xff1a; Slots游戏是一种极具流行度的赌博和娱乐形式&#xff0c;通常被称为老虎机或水果机。它们在赌场、线上游戏平台和手机应用中广泛存在。一般这类游戏都使用Unity…

重温MySQL之索引那些事

文章目录 前言一、概念1.1 索引作用1.2 索引类型1.3 B树索引结构1.4 B树索引源码分析 二、查询计划2.1 explain2.2 id2.3 select_type2.4 table2.5 partitions2.6 type2.7 possible_keys2.8 key2.9 key_len2.10 ref2.11 rows2.12 filtered2.13 Extra 三、索引优化3.1 索引失效3…

【2023年终总结】 | 时光之舟:乘载着回忆与希望穿越2023,抵达2024

文章目录 1 回忆2 希望 1 回忆 2023年对我来说是非常梦幻的一年&#xff0c;我在2023年初的时候确认去做AI方向&#xff0c;在这之前我尝试了前端开发&#xff0c;移动App开发&#xff0c;云FPGA等方向&#xff0c;但是感觉自己都不是很喜欢&#xff0c;然后就开始尝试新的方向…

idea如何设置自动换行

idea设置自动换行其实很简单&#xff0c;只需要进行一步操作就可以了。   看下图&#xff1a;我们只需要在相应的位置加上文件的类型就可以了&#xff0c;比如我们写的类都是.java文件&#xff0c;那么我们只需要加上 *.java就可以实现自动换行了。

基于Springboot实现天天生鲜销售电商平台

SSM毕设分享 基于Springboot实现天天生鲜销售电商平台 1 项目简介 Hi&#xff0c;各位同学好&#xff0c;这里是郑师兄&#xff01; 今天向大家分享一个毕业设计项目作品【】 师兄根据实现的难度和等级对项目进行评分(最低0分&#xff0c;满分5分) 难度系数&#xff1a;3分 …

HarmonyOS4.0系统性深入开发11通过message事件刷新卡片内容

通过message事件刷新卡片内容 在卡片页面中可以通过postCardAction接口触发message事件拉起FormExtensionAbility&#xff0c;然后由FormExtensionAbility刷新卡片内容&#xff0c;下面是这种刷新方式的简单示例。 在卡片页面通过注册Button的onClick点击事件回调&#xff0c;…