读书笔记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 作为入口函数的名称,并且遵循标准的参数类型和返回类型。

未完待续——————

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

UE5.1_Gameplay Debugger启用

UE5.1_Gameplay Debugger启用 重点问题&#xff1a; Gamplay Debugger启用不知道&#xff1f; Apostrophe、Tilde键不知道是哪个&#xff1f; Gameplay调试程序 | 虚幻引擎文档 (unrealengine.com) Gameplay Debugger

2023下半年的总结

我从八月下旬开始写的&#xff0c;到现在差不多有半年了&#xff0c;总结一下吧&#xff01; 1.计算机视觉 在计算机视觉方面&#xff0c;想必两个有名的深度学习框架&#xff08;TensorFlow和PyTorch&#xff09;大家都很清楚吧&#xff0c;以及OpenCV库。对于人脸识别&…

王道考研计算机网络——应用层

如何为用户提供服务&#xff1f; CS/P2P 提高域名解析的速度&#xff1a;local name server高速缓存&#xff1a;直接地址映射/低级的域名服务器的地址 本机也有告诉缓存&#xff1a;本机开机的时候从本地域名服务器当中下载域名和地址的对应数据库&#xff0c;放到本地的高…

cargo设置国内源 windows+linux

cargo默认的源比pip的源好多了&#xff0c;但是有时候速度还是很慢 一、部分国内源&#xff08;排名不分先后&#xff09; 这些源的格式用在具体的配置文件中 中国科学技术大学 [source.crates-io] replace-with ustc[source.ustc] registry "git://mirrors.ustc.ed…

用LCD循环右移显示“Welcome to China“

#include<reg51.h> //包含单片机寄存器的头文件 #include<intrins.h> //包含_nop_()函数定义的头文件 sbit RSP2^0; //寄存器选择位&#xff0c;将RS位定义为P2.0引脚 sbit RWP2^1; //读写选择位&#xff0c;将RW位定义为P2.1引脚 sbit EP2^2; //使能…

【形式语言与自动机/编译原理】CFG-->Greibach-->NPDA(2)

本文将详细讲解《形式语言与自动机》&#xff08;研究生课程&#xff09;或《编译原理》&#xff08;本科生课程&#xff09;中的上下文无关文法&#xff08;CFG&#xff09;转换成Greibach范式&#xff0c;再转成下推自动机&#xff08;NPDA&#xff09;识别语言是否可以被接受…

内侧APP分发平台:移动应用开发的加速器

在数字化时代&#xff0c;移动应用已成为企业触达用户的重要渠道。为了迅速占领市场&#xff0c;开发者需要一种能够快速发布和测试移动应用的解决方案。内侧APP分发平台应运而生&#xff0c;它通过简化应用的封装、测试和分发流程&#xff0c;极大地提升了移动应用的上市速度。…

WPF+Halcon 培训项目实战(13):HS 鼠标绘制图形

文章目录 前言相关链接项目专栏运行环境匹配图片矩形鼠标绘制Halcon添加右键事件Task封装运行结果个人引用问题原因推测 圆形鼠标绘制代码运行结果 后面安排 前言 为了更好地去学习WPFHalcon&#xff0c;我决定去报个班学一下。原因无非是想换个工作。相关的教学视频来源于下方…

《深入理解JAVA虚拟机笔记》对象的创建和访问、对象头

对象的创建 当 Java 虚拟机遇到一条字节码 new 指令时&#xff0c;首先将去检查这个指令的参数是否能做常量池中定位到一个类的符号引用&#xff0c;并且检查这个符号引用代表的类是否已被加载、解析和初始化过。如果没有&#xff0c;那必须先执行相应的类加载过程。 在类加载…

2021-03-17 51单片机设计洗衣机

缘由51单片机设计洗衣机_其他-CSDN问答 通过控制两个继电器循环工作状态&#xff0c;模拟洗衣机间歇正反转。设定正转3s&#xff0c;停止2s&#xff0c;然后反转3s&#xff0c;停止2s&#xff0c;循环上述动作。求代码和proteus仿真图。 #include "reg52.h" sbit L…

金融帝国实验室(Capitalism Lab)官方正版游戏『2024新年特卖优惠』

「金融帝国实验室」&#xff08;Capitalism Lab&#xff09;Enlight 官方正版游戏「2024新年特卖」 ■优惠时限&#xff1a;2024.01.01&#xff5e;01.31 ■游戏开发商&#xff1a;Enlight Software Ltd. 请您认准以下官方正版游戏购买链接&#xff1a;支持“支付宝&am…

08 通信协议之UART

引言&#xff1a; 从本文开始&#xff0c; 本个专题之后的几篇文章都是讲解嵌入式开发中几种常见的通信协议的&#xff0c; 比如UART, I2C&#xff0c;SPI&#xff0c; CAN总线这些我就不讲了&#xff0c; 没用到过&#xff0c; 学是学不完的&#xff0c; 等用到的时候再去学习…

如何开发一个google插件(二)

前言 在上一篇文章如何开发一个google插件(一)里主要介绍了google插件的基本结构。 在这篇文章中主要结合reactwebpack进行一个代码演示&#xff0c;源码地址&#xff1a;源码地址 下载源码后打开浏览器的扩展程序管理->加载已解压的扩展程序&#xff0c;即可调试插件 此…

2024年安全员-B证证模拟考试题库及安全员-B证理论考试试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年安全员-B证证模拟考试题库及安全员-B证理论考试试题是由安全生产模拟考试一点通提供&#xff0c;安全员-B证证模拟考试题库是根据安全员-B证最新版教材&#xff0c;安全员-B证大纲整理而成&#xff08;含2024年…

java struts2教务管理系统Myeclipse开发mysql数据库struts2结构java编程计算机网页项目

一、源码特点 java struts2 教务管理系统 是一套完善的web设计系统&#xff0c;对理解JSP java编程开发语言有帮助 struts2 框架开发&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境 为TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库…

7.12全排列②(LC47-M)

算法&#xff1a; 这道题目和46.全排列 (opens new window)的区别在与给定一个可包含重复数字的序列&#xff0c;要返回所有不重复的全排列。 所以就是多了个去重操作。 还是一样的套路&#xff1a; 先排序&#xff1a; Arrays.sort(nums); 再去重&#xff1a; // used[…

C语言课程设计参考题目

一、工资管理系统 需求分析 工资信息存放在文件中&#xff0c;提供文件的输入、输出等操作&#xff1b;要实现浏览功能&#xff0c;提供显示、排序操作&#xff1b;而查询功能要求实现查找操作&#xff1b;另外还应该提供键盘式选择菜单以实现功能选择。 2、总体设计 整个系统可…

管道进行进程间通信(上)

管道进行进程间通信 在posix和system V标准还没有出现的时候&#xff0c;进程间是如何进行通信的呢&#xff1f;这就要借助于我们今天学习的这个东西了。在进程间通信的标准没有出现之前&#xff0c;在os中就已经存在了文件了。而管道就是基于文件的一种进行进程间通信的方式。…

Redis 数据结构和常用命令

* 代表多个&#xff0c;&#xff1f;代表一个 &#xff08;不用全部敲出来&#xff0c;按住tab可以自动补全&#xff09; -2是无效&#xff0c;-1是永久有效 &#xff1b;贴心小提示&#xff1a;内存非常宝贵&#xff0c;对于一些数据&#xff0c;我们应当给他一些过期时间&a…

springboot 双数据源配置

1:pom <!--SpringBoot启动依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</group…